• JDK8新特性之 stream流


    大家好,这里是教授.F

    目录

    引入:

    将list集合转成set集合:

    补充: 

    将list集合转成Map集合:

    查找最大和最小:

    Match用法:

    过滤器的用法:

    限制元素个数---limit:

    实现对数据排序:

    遍历:

    统计个数---count:

     跳过前部分元素---skip():

    流的转换Map:

    对集合进行排序---sorted():

    去除重复数据---distinct():


    引入:

       Java 8中引入的Stream是一种对集合进行操作的新方式,它提供了一种更具表现力和简洁的方式来处理集合数据。Stream可以被看作是对集合进行数据处理的高级工具,它提供了一种类似于流水线的方式来处理集合中的元素,可以进行过滤、映射、排序、聚合等操作。

    将list集合转成set集合:

    1. 要使用Stream来将List集合转换为Set集合,
    2. 你可以使用Stream的distinct()方法来去除重复元素,
    3. 然后使用collect()方法将结果收集到一个Set集合中。下面是一个示例代码:
    4. java
    5. import java.util.List;
    6. import java.util.Set;
    7. import java.util.stream.Collectors;
    8. public class Main {
    9. public static void main(String[] args) {
    10. // 创建一个List集合
    11. List list = List.of(1, 2, 3, 4, 4, 5, 5, 6);
    12. // 使用Stream将List转换为Set
    13. Set set = list.stream()
    14. .distinct() // 去除重复元素
    15. .collect(Collectors.toSet());
    16. // 收集到Set集合中
    17. // 打印转换后的Set集合
    18. System.out.println("转换后的Set集合:" + set);
    19. }
    20. }

    补充: 

            set集合底层依赖于 map集合实现防重复key,map集合底层基于equals比较防重复的结合哈希值的

    将list集合转成Map集合:

            补充:list集合只有元素值。key需要指定。我们可以将key指为

    1. 要使用Stream将List集合转换为Map集合,你需要指定一个键-值对的生成规则。
    2. 通常情况下,可以使用Collectors.toMap()方法来实现这个目的。
    3. 在toMap()方法中,你需要提供两个函数:一个用于提取键,另一个用于提取值。
    4. 下面是一个示例代码:
    5. import java.util.List;
    6. import java.util.Map;
    7. import java.util.stream.Collectors;
    8. public class Main {
    9. public static void main(String[] args) {
    10. // 创建一个List集合,包含学生的姓名和年龄
    11. List students = List.of(
    12. new Student("Alice", 20),
    13. new Student("Bob", 22),
    14. new Student("Charlie", 21)
    15. );
    16. // 使用Stream将List转换为Map
    17. Map studentMap = students.stream()
    18. .collect(Collectors.toMap(Student::getName, Student::getAge));
    19. // 打印转换后的Map集合
    20. System.out.println("转换后的Map集合:" + studentMap);
    21. }
    22. static class Student {
    23. private String name;
    24. private int age;
    25. public Student(String name, int age) {
    26. this.name = name;
    27. this.age = age;
    28. }
    29. public String getName() {
    30. return name;
    31. }
    32. public int getAge() {
    33. return age;
    34. }
    35. }
    36. }

    计算求和---reduce():
            reduce 方法将 Stream 中的元素按照给定的操作进行组合,最终得到一个值。

    1. import java.util.stream.Stream;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 创建一个包含几个整数的 Stream
    5. Stream numbers = Stream.of(1, 2, 3, 4, 5);
    6. // 使用 reduce 方法计算求和
    7. int sum = numbers.reduce(0, (subtotal, element) -> subtotal + element);
    8. System.out.println("Stream 中元素的求和为:" + sum);
    9. }
    10. }

    查找最大和最小:

    Match用法:

            判断数据是否匹配指定的条件

    allMatch(PredicateT> predicate)返回此流的所有元素是否与提供的谓词匹配。

    anyMatch(PredicateT> predicate)返回此流的任何元素是否与提供的谓词匹配。

    noneMatch(PredicateT> predicate)返回此流的元素是否与提供的谓词匹配。匹配所有元素,所有元素都不满足条件

    过滤器的用法:

    1. import java.util.Arrays;
    2. import java.util.List;
    3. import java.util.stream.Collectors;
    4. public class Main {
    5. public static void main(String[] args) {
    6. // 创建一个包含字符串的 List
    7. List words = Arrays.asList("apple", "banana", "cherry", "date");
    8. // 使用 filter 方法过滤包含字母 'a' 的字符串
    9. List filteredWords = words.stream()
    10. .filter(word -> word.contains("a"))
    11. .collect(Collectors.toList());
    12. // 打印过滤后的结果
    13. System.out.println("包含字母 'a' 的单词有:" + filteredWords);
    14. }
    15. }

    限制元素个数---limit:

            limit 方法接受一个参数,即要限制的元素数量。只有前面指定数量的元素会被保留下来,超过指定数量的元素会被丢弃。

    1. import java.util.stream.Stream;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 创建一个包含整数的 Stream
    5. Stream numbers = Stream.iterate(0, n -> n + 1);
    6. // 使用 limit 方法限制 Stream 中元素的数量
    7. Stream limitedStream = numbers.limit(5);
    8. // 打印限制后的结果
    9. limitedStream.forEach(System.out::println);
    10. }
    11. }

    实现对数据排序:

    遍历:

            forEach()方法可以用来遍历集合中的元素。

            forEach方法接受一个Consumer接口作为参数,该接口表示对流中的每个元素要执行的操作。Consumer接口定义了一个名为accept的抽象方法,该方法接受一个参数并返回void,通常用于执行一些操作而不返回结果。

    1. import java.util.Arrays;
    2. import java.util.List;
    3. public class Main {
    4. public static void main(String[] args) {
    5. // 创建一个包含整数的 List 集合
    6. List numbers = Arrays.asList(1, 2, 3, 4, 5);
    7. // 使用 forEach 方法遍历 List 集合,并打印每个元素
    8. numbers.forEach(System.out::println);
    9. }
    10. }

    统计个数---count:

            统计stream中的元素个数。

    1. import java.util.stream.Stream;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 创建一个包含几个整数的 Stream
    5. Stream numbers = Stream.of(1, 2, 3, 4, 5);
    6. // 使用 count 方法统计 Stream 中元素的个数,并打印结果
    7. long count = numbers.count();
    8. System.out.println("Stream 中元素的个数为:" + count);
    9. }
    10. }

     跳过前部分元素---skip():

    1. import java.util.stream.Stream;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 创建一个包含整数的 Stream
    5. Stream numbers = Stream.of(1, 2, 3, 4, 5);
    6. // 使用 skip 方法跳过前两个元素
    7. Stream skippedStream = numbers.skip(2);
    8. // 打印跳过后的结果
    9. skippedStream.forEach(System.out::println);
    10. }
    11. }

    流的转换Map:

            map方法能将一个流中的元素映射到另一个流中。

    1. import java.util.stream.Stream;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 创建一个包含字符串的 Stream
    5. Stream stringStream = Stream.of("1", "2", "3", "4", "5");
    6. // 使用 map 方法将字符串转换为整数类型
    7. Stream integerStream = stringStream.map(Integer::parseInt);
    8. // 打印转换后的结果
    9. integerStream.forEach(System.out::println);
    10. }
    11. }

    对集合进行排序---sorted():

    1. Stream<T> sorted();//根据集合中元素来进行自然排序
    2. Stream<T> sorted(Comparator<? super T> comparator);//可以指定排序类型

    去除重复数据---distinct():

            

  • 相关阅读:
    双网关多发选收配置实验案例(5G CPE场景)
    大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数
    【动态规划】139. 单词拆分、多重背包
    REACT
    ARM PWN
    Java 8 API文档chm版
    iOS 使用runtime 解决按钮重复点击的问题
    leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash
    地图与WebGIS、地图的作用、数字地图的应用
    Selenium 3和JUnit 5中的显示等待与隐式等待
  • 原文地址:https://blog.csdn.net/FZYjiaoshou/article/details/138769271