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; } }
相关文章: