Java8 Stream流

150 阅读1分钟
        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        // 获取对应的平方数
        List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
        squaresList.forEach(x -> System.out.println(x));

结果:

9
4
49
25

获取空字符串的数量:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
Long count = strings.stream().filter(string -> !string.isEmpty() && string.length()==3).count();
System.out.println(count);

结果:

3

对随机数排序:

        //用于对流进行排序。以下代码片段使用 sorted 方法对输出的 5 个随机数进行排序:
        Random random = new Random();
        random.ints().limit(5).sorted().forEach(System.out::println);

结果

-1907801935
-1887798425
-1463883840
-1238902402
-256137322

流转换集合和聚合元素:

        //流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:
        List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
        System.out.println("筛选列表: " + filtered);
        String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
        System.out.println("合并字符串: " + mergedString);

结果:

筛选列表: [abc, bc, efg, abcd, jkl]
合并字符串: abc, bc, efg, abcd, jkl

普通类型排序:

        //普通类型排序
        List<Integer> ints = Arrays.asList(2, 3, 2, 6, 1,5, 0);
        ints = ints.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        ints.forEach(x -> System.out.println(x));

结果:

6
5
3
2
2
1
0

对象类型排序:

        // 对象类型排序
        List<Student> list = new ArrayList<Student>();
        list.add(new Student(1, "Mahesh", 12));
        list.add(new Student(2, "Suresh", 15));
        list.add(new Student(3, "Nilesh", 10));
        list = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
        list.forEach(student -> System.out.println(student.getAge()));

结果:

10
12
15