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));

Java8 list的lambda表达式_java8

2、 collect 处理集合,转换成需要的新集合

List<Integer> ageList = list.stream().map(s -> Integer.valueOf(s.getAge())).collect(Collectors.toList());
System.out.println("collect==" + ageList);

Java8 list的lambda表达式_java8_02

3、 filter 过滤数据

List<PersonList> filterList = list.stream().filter(s -> "10".equals(s.getAge())).collect(Collectors.toList());
System.out.println("filter===" + filterList);

Java8 list的lambda表达式_list_03

4、 map 原来流中的元素转化

List<String> personNameList = list.stream().map(PersonList::getName).collect(Collectors.toList());
System.out.println("map=====" + personNameList);

Java8 list的lambda表达式_list_04

5、 distinct 去重

List<Integer> distinctList = list.stream().map(s -> Integer.valueOf(s.getAge())).distinct().collect(Collectors.toList());
System.out.println("distinct===" + distinctList);

Java8 list的lambda表达式_list_05

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);

Java8 list的lambda表达式_list_06

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);

Java8 list的lambda表达式_list_07

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);

Java8 list的lambda表达式_java8_08

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);

Java8 list的lambda表达式_lambda表达式_09

10、peek 在 peek 方法里面做任意没有返回值的事,比如打印日志

list.stream().map(s -> s.getName()).peek(s -> System.out.println(s)).collect(Collectors.toList());

Java8 list的lambda表达式_lambda表达式_10

11、limit 限制输出值个数,入参是限制的个数大小

List<Integer> limit = list.stream().map(s -> Integer.valueOf(s.getAge())).limit(2L).collect(Collectors.toList());
System.out.println("limit====" + limit);

Java8 list的lambda表达式_java8_11

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);

Java8 list的lambda表达式_java8_12



@Data
class PersonList {

    private String name;
    private String age;

    public PersonList() {
    }

    public PersonList(String name, String age) {
        this.name = name;
        this.age = age;
    }
}