获取 List 中大于 50 的数据
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTest {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,51,52,53);
List<Integer> filterList = list.stream().filter(x -> x>50).collect(Collectors.toList());
fliterList.forEach(System.out::println);
}
}
四种 Stream 创建方式
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class StreamTest {
public static void main(String[] args) {
//创建Stream
//1、通过Collection系列集合提供的stream()或parallelStream()
List<String> list=new ArrayList<>();
Stream<String> stream = list.stream();
//2、通过Arrays中的静态方法stream()获取
Integer[] integers=new Integer[10];
Stream<Integer> stream1 = Arrays.stream(integers);
//3、通过Stream类中的静态方法of()
Stream<Integer> stream2 = Stream.of(integers);
//4、迭代创建
Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2);
iterate.limit(5).forEach(System.out::println);
}
}
将年龄超过 30 岁的过滤出来
//过滤出年龄大于30岁的人
Stream<User> userStream = list.stream().filter((e) -> e.getAge() >= 30);
userStream.forEach(System.out::println);
public class StreamTest {
public static void main(String[] args) {
List<User> list= Arrays.asList(
new User("javayz",23,"male"),
new User("张三",25,"male"),
new User("李四",30,"female"),
new User("王五",33,"female"),
new User("王五",33,"female")
);
}
}
public class User {
private String name;
private int age;
private String sex;
public User(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "name:"+name+" age:"+age+" sex:"+sex;
}
}
limit 截断使元素不超过给定的数量
//对取出来的数据只展示一条
Stream<User> userStream = list.stream()
.filter((e) -> e.getAge() >= 30)
.limit(1);
userStream.forEach(System.out::println);
skip 跳过集合中的前 n 个数
Stream<User> userStream = list.stream().skip(2);
userStream.forEach(System.out::println);
map 通过 Function 接口对 stream 中的每个数据处理后返回新的数据,比如下面这段代码将所有的英文改为大写
List<String> list1=Arrays.asList("aa","bb","cc");
Stream<String> stringStream = list1.stream().map((str) -> str.toUpperCase());
stringStream.forEach(System.out::println);
flatmap
flatmap 通过 Function 接口多个 Stream 流合并成一个 Stream
比如把一个集合 {"aa","bb","cc"} 变成 {'a','a','b','b','c','c'} ,使用 map 就需要这样:
List<String> list1=Arrays.asList("aa","bb","cc");
Stream<Character> characterStream = list1.stream().flatMap((str) -> {
List<Character> characters = new ArrayList<>();
for (Character ch : str.toCharArray()) {
characters.add(ch);
}
return characters.stream();
});
characterStream.forEach(System.out::println);
按年龄进行排序
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class StreamTest {
public static void main(String[] args) {
List<User> list= Arrays.asList(
new User("张三",25,"male"),
new User("javayz",23,"male"),
new User("李四",30,"female"),
new User("王五",33,"female")
);
Stream<User> sorted = list.stream().sorted((e1, e2) -> {
return e1.getAge() == e2.getAge() ? 0 : e1.getAge() > e2.getAge() ? 1 : -1;
});
sorted.forEach(System.out::println);
}
}
allMatch 检查是否匹配所有元素,返回 boolean 类型的结果,
boolean male = list.stream().allMatch((e) -> e.getSex().equals("male"));
System.out.println(male);
anyMatch 检查是否至少匹配一个元素
boolean male = list.stream().anyMatch((e) -> e.getSex().equals("male"));
System.out.println(male);
noneMatch 检查是不是没有元素能够匹配指定的规则
boolean male = list.stream().noneMatch((e) -> e.getSex().equals("male"));
System.out.println(male);
count 返回当前流中的元素总个数
long count = list.stream().count();
System.out.println(count);
max 返回当前流中的最大值
Optional<User> max = list.stream().max((e1, e2) -> {
return Integer.compare(e1.getAge(), e2.getAge());
});
System.out.println(max.get());
min 返回当前流中的最小值,使用方法和 max 一致
Optional<User> min = list.stream().min((e1, e2) -> {
return Integer.compare(e1.getAge(), e2.getAge());
});
System.out.println(min.get());
reduce 将流中的元素反复结合起来,得到一个值
List<Integer> list=Arrays.asList(1,2,3,4,5,6,7,8,9);
//从第0个元素开始,对list求和
Integer reduce = list.stream().reduce(0, (x, y) -> x + y);
System.out.println(reduce);
collection 将流中的数据接收成其他的形式
List<String> collect = list.stream().map((e) -> e.getName()).collect(Collectors.toList());
System.out.println(collect);
每个班成绩大于 80 分的学生名单
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("张三", 88, 1001),
new Student("李四", 79, 1001),
new Student("王五", 83, 1001),
new Student("孙三", 90, 1002),
new Student("赵四", 66, 1002),
new Student("韩五", 77, 1002)
);
Map<Integer,List<Student>> result = students.stream()
.filter(student->student.getGrade()>80)
.collect(Collectors.groupingBy(Student::getClassNo));
System.out.println(result);
}
}

30万+

被折叠的 条评论
为什么被折叠?



