List<PersonList> list = new ArrayList<PersonList>() {{
add(new PersonList("张三", "1"));
add(new PersonList("李四", "2"));
add(new PersonList("王五", "3"));
add(new PersonList("赵六", "1"));
}};
1、 forEach 遍历
list.forEach(s -> s.setAge(s.getAge() + "0"));
list.forEach(s -> System.out.println(s));
2、 collect 处理集合,转换成需要的新集合
List<Integer> ageList = list.stream().map(s -> Integer.valueOf(s.getAge())).collect(Collectors.toList());
System.out.println("collect==" + ageList);
3、 filter 过滤数据
List<PersonList> filterList = list.stream().filter(s -> "10".equals(s.getAge())).collect(Collectors.toList());
System.out.println("filter===" + filterList);
4、 map 原来流中的元素转化
List<String> personNameList = list.stream().map(PersonList::getName).collect(Collectors.toList());
System.out.println("map=====" + personNameList);
5、 distinct 去重
List<Integer> distinctList = list.stream().map(s -> Integer.valueOf(s.getAge())).distinct().collect(Collectors.toList());
System.out.println("distinct===" + distinctList);
6、 sorted 排序
List<Integer> sortedList = list.stream().map(s -> Integer.valueOf(s.getAge()))
// 正序 等同于 .sorted(Comparator.naturalOrder())
.sorted().collect(Collectors.toList());
System.out.println("sortedList===" + sortedList);
sortedList = list.stream().map(s -> Integer.valueOf(s.getAge()))
// 倒序
.sorted(Comparator.reverseOrder()).collect(Collectors.toList());
System.out.println("sortedList.reverseOrder===" + sortedList);
7、groupingBy 分组
Map<String, List<PersonList>> strList = list.stream().collect(Collectors.groupingBy(PersonList::getAge));
Map<String, List<PersonList>> strList2 = list.stream().collect(Collectors.groupingBy(PersonList::getAge, Collectors.toList()));
System.out.println("Collectors.groupingBy====" + strList);
System.out.println("Collectors.groupingBy====" + strList2);
// 两级范围
Map<Boolean, List<PersonList>> twoRange = list.stream().collect(Collectors.groupingBy(student -> student.getAge().equals("10")));
System.out.println("两级范围====" + twoRange);
// 多级范围
Map<String, List<PersonList>> multiRange = list.stream().collect(Collectors.groupingBy(student -> {
if (Integer.valueOf(student.getAge()) < 20) {
return "C";
} else if (Integer.valueOf(student.getAge()) > 20) {
return "B";
}
return "A";
}));
System.out.println("多级范围====" + multiRange);
8、findFirst 匹配到第一个满足条件的值就返回
PersonList first = list.stream().filter(s -> "20".equals(s.getAge())).findFirst().get();
System.out.println("findFirst====" + first);
// 防止空指针
PersonList firstNull = list.stream().filter(s -> "100".equals(s.getAge())).findFirst()
// orElse 表示如果 findFirst 返回 null 的话,就返回 orElse 里的内容
.orElse(new PersonList("孙七", "60"));
System.out.println("findFirstNull====" + firstNull);
9、reduce 在循环里面叠加计算值
int sum = list.stream().map(s -> Integer.valueOf(s.getAge()))
// s1 和 s2 表示循环中的前后两个数
.reduce((s1, s2) -> s1 + s2).orElse(0);
System.out.println("reduce、sum====" + sum);
sum = list.stream().map(s -> Integer.valueOf(s.getAge()))
// 第一个参数表示基数,会从 100 开始加
.reduce(100, (s1, s2) -> s1 + s2);
System.out.println("reduce、sum、100====" + sum);
10、peek 在 peek 方法里面做任意没有返回值的事,比如打印日志
list.stream().map(s -> s.getName()).peek(s -> System.out.println(s)).collect(Collectors.toList());
11、limit 限制输出值个数,入参是限制的个数大小
List<Integer> limit = list.stream().map(s -> Integer.valueOf(s.getAge())).limit(2L).collect(Collectors.toList());
System.out.println("limit====" + limit);
12、max、min 获取集合中最大、最小的对象。
PersonList maxPerson = list.stream().max(Comparator.comparing(s -> Integer.valueOf(s.getAge()))).get();
PersonList minPerson = list.stream().min(Comparator.comparing(s -> Integer.valueOf(s.getAge()))).get();
System.out.println("maxPerson====" + maxPerson);
System.out.println("minPerson====" + minPerson);
@Data
class PersonList {
private String name;
private String age;
public PersonList() {
}
public PersonList(String name, String age) {
this.name = name;
this.age = age;
}
}