package stream;

import lombok.Data;

import java.util.*;
import java.util.stream.Collectors;

public class StreamLearn {
    static List<User> list = new ArrayList<User>() {
        {
            add(new User(1l, "张三", 10, "清华大学"));
            add(new User(2l, "李四", 12, "清华大学"));
            add(new User(3l, "王五", 15, "清华大学"));
            add(new User(4l, "赵六", 12, "清华大学"));
            add(new User(4l, "赵六", 12, "清华大学"));
            add(new User(5l, "田七", 25, "北京大学"));
            add(new User(6l, "小明", 16, "北京大学"));
            add(new User(7l, "小红", 14, "北京大学"));
            add(new User(8l, "小华", 14, "浙江大学"));
            add(new User(9l, "小丽", 17, "浙江大学"));
            add(new User(10l, "小何", 10, "浙江大学"));
        }
    };

    public static void main(String[] args) {

        List<User> users = list.stream().filter(user -> "清华大学".equals(user.getSchool())).distinct().collect(Collectors.toList());
        users.forEach(user -> System.out.println(user.getName() + ","));
        System.out.println("=====================================");

        List<User> collect = list.stream().filter(user -> user.getAge() % 2 == 0).limit(2).collect(Collectors.toList());
        collect.forEach(user -> {
            System.out.println(user);
        });
        System.out.println("=====================================");

        List<User> collect1 = list.stream().sorted((s1, s2) -> s2.getAge() - s1.getAge()).collect(Collectors.toList());  //默认是从小到大排序,
        collect1.forEach(user -> System.out.println(user));
        System.out.println("=====================================");

        List<User> collect2 = list.stream().skip(2).collect(Collectors.toList());
        collect2.forEach(user -> System.out.println(user));
        System.out.println("=====================================");

        List<Object> collect3 = list.stream().filter(user -> "清华大学".equals(user.getSchool())).map(User::getName).collect(Collectors.toList());
        collect3.forEach(userName -> System.out.println(userName));
        System.out.println("=====================================");

        int sum = list.stream().filter(user -> "清华大学".equals(user.getSchool())).mapToInt(User::getAge).sum();
        System.out.println("学校是清华大学的年龄总和" + sum);
        System.out.println("=====================================");

        String[] strings = {"hello", "world"};
        List<String> collect4 = Arrays.asList(strings).stream().map(s -> s.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
        collect4.forEach(s -> System.out.print(s));
        System.out.println("=====================================");

        boolean b = list.stream().anyMatch(user -> user.getAge() > 15);
        boolean c = list.stream().noneMatch(user -> user.getAge() == 18);
        System.out.println(b);
        System.out.println(c);
        System.out.println("=====================================");

        Optional<User> any = list.stream().filter(user -> user.getAge() > 10).findAny();
        Optional<User> first = list.stream().filter(user -> user.getAge() > 10).findFirst();
        User user = any.get();
        System.out.println(user);
        System.out.println(first.get());
        System.out.println("=====================================");

        Integer reduce = list.stream().filter(student -> "清华大学".equals(student.getSchool())).map(User::getAge).reduce(0, (a, d) -> a + d);
        Integer reduce1 = list.stream().filter(student -> "清华大学".equals(student.getSchool())).map(User::getAge).reduce(0, Integer::sum);
        Integer integer = list.stream().filter(student -> "清华大学".equals(student.getSchool())).map(User::getAge).reduce(Integer::sum).get();
        System.out.println(reduce);
        System.out.println(reduce1);
        System.out.println(integer);
        System.out.println("=====================================");

        Integer age = list.stream().collect(Collectors.maxBy((s1, s2) -> s1.getAge() - s2.getAge())).get().getAge();
        Integer age1 = list.stream().collect(Collectors.minBy((s1, s2) -> s1.getAge() - s2.getAge())).get().getAge();
        Integer collect5 = list.stream().collect(Collectors.maxBy(Comparator.comparing(User::getAge))).get().getAge();
        Integer collect6 = list.stream().collect(Collectors.minBy(Comparator.comparing(User::getAge))).get().getAge();
        System.out.println(age);
        System.out.println(age1);
        System.out.println(collect5);
        System.out.println(collect6);
        System.out.println("=====================================");

        Integer sumAge = list.stream().collect(Collectors.summingInt(User::getAge));
        System.out.println(sumAge);
        Double collect7 = list.stream().collect(Collectors.averagingDouble(User::getAge));
        IntSummaryStatistics collect8 = list.stream().collect(Collectors.summarizingInt(User::getAge));
        System.out.println(collect7);
        System.out.println(collect8);
        System.out.println("=====================================");

        String collect9 = list.stream().map(User::getName).collect(Collectors.joining(","));
        System.out.println(collect9);
        System.out.println("======================================");

        System.out.println("分组");
        Map<String, List<User>> collect11 = list.stream().collect(Collectors.groupingBy(User::getSchool));
        Map<String, Map<Integer, Long>> collect21 = list.stream().collect(Collectors.groupingBy(User::getSchool, Collectors.groupingBy(User::getAge, Collectors.counting())));
        Map<String, Map<Integer, Map<String, Long>>> collect41 = list.stream().collect(Collectors.groupingBy(User::getSchool, Collectors.groupingBy(User::getAge, Collectors.groupingBy(User::getName,Collectors.counting()))));
        Map<String, Long> collect31 = list.stream().collect(Collectors.groupingBy(User::getSchool, Collectors.counting()));
        System.out.println("collect1 = " + collect11);
        System.out.println("collect2 = " + collect21);
        System.out.println("collect3 = " + collect31);
        System.out.println("collect4 = " + collect41);


    }

}

@Data
class User {
    private Long id;       //主键id
    private String name;   //姓名
    private Integer age;   //年龄
    private String school; //学校

    public User(Long id, String name, Integer age, String school) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.school = school;
    }
}

相关文章:

  • 2022-01-12
  • 2021-11-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-11
  • 2022-02-01
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2023-04-06
  • 2022-12-23
相关资源
相似解决方案