欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Stream流在日常开发中的使用

Stream流在日常开发中的使用

2024/10/25 1:32:29 来源:https://blog.csdn.net/hellwindy/article/details/141622317  浏览:    关键词:Stream流在日常开发中的使用

前言

Java 8 引入的 Stream API 提供了丰富的功能,使得对集合数据进行处理变得更加简洁和高效。Stream API提供了丰富的方法来操作数据流,其中包括了mapflatMapfilter等常用方法。这些方法使得对集合数据进行转换、过滤、分组、排序等操作变得简单而直观。了不起整理了日常开发中经常使用到的方法,帮助老铁们更好地理解和运用Java 8 Stream API。

map 方法

map 方法用于将流中的每个元素映射为另一个元素。常用于对象转换、属性提取等场景。

应用场景:

  • 从对象列表中提取某个属性值。

  • 对流中的元素进行转换操作。

示例代码:

假设有一个 Person 类,包含姓名和年龄两个属性,我们希望提取所有人的姓名:

List<Person> persons = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 35)
);List<String> names = persons.stream().map(Person::getName).collect(Collectors.toList());System.out.println(names); // 输出:[Alice, Bob, Charlie]

flatMap 方法

flatMap 方法用于将流中的每个元素映射为一个流,然后将这些流扁平化为一个流。常用于处理嵌套集合、合并多个流等场景。

应用场景:

  • 处理嵌套集合,将多层嵌套的集合结构展开为单层结构。

  • 合并多个流为一个流。

示例代码:

假设有一个列表,其中每个元素是一个字符串列表,我们希望将所有字符串连接为一个新的列表:

List<List<String>> nestedList = Arrays.asList(Arrays.asList("Java", "Python"),Arrays.asList("C++", "JavaScript"),Arrays.asList("Ruby", "Go")
);List<String> flattenedList = nestedList.stream().flatMap(List::stream).collect(Collectors.toList());System.out.println(flattenedList); // 输出:[Java, Python, C++, JavaScript, Ruby, Go]

filter 方法

filter 方法用于过滤流中的元素,保留满足指定条件的元素。常用于条件筛选、数据过滤等场景。

应用场景:

  • 根据特定条件筛选流中的元素。

  • 过滤掉不符合条件的数据。

示例代码:

假设有一个整数列表,我们希望保留所有偶数:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());System.out.println(evenNumbers); // 输出:[2, 4, 6, 8, 10]

ifPresent 方法

ifPresent 方法用于在 Optional 对象包含值的情况下执行指定的操作。常用于避免空指针异常、处理可能为空的对象等场景。

应用场景:

  • 在对象存在时执行特定操作。

  • 避免空指针异常。

示例代码:

假设有一个可能为空的 Optional 对象,我们希望在它包含值的情况下打印出该值:

Optional.ofNullable("Hello, world!").ifPresent(System.out::println);
// 输出:Hello, world!

groupingBy 方法

groupingBy 方法用于按照指定条件对流中的元素进行分组。常用于数据分组、统计等场景。

应用场景:

  • 根据特定条件对数据进行分组。

  • 进行数据统计、分析等操作。

示例代码:

假设有一个学生列表,我们希望按照年龄进行分组:

List<Student> students = Arrays.asList(new Student("Alice", 20),new Student("Bob", 22),new Student("Charlie", 20),new Student("David", 22)
);Map<Integer, List<Student>> studentsByAge = students.stream().collect(Collectors.groupingBy(Student::getAge));System.out.println(studentsByAge);
// 输出:{20=[Student(name=Alice, age=20), Student(name=Charlie, age=20)], 22=[Student(name=Bob, age=22),Student(name=David, age=22)]}

distinct 方法

distinct 方法用于去除流中重复的元素,保留唯一的元素。常用于数据去重、唯一性检查等场景。

应用场景:

  • 去除流中的重复元素。

  • 进行数据唯一性检查。

示例代码:

假设有一个包含重复元素的列表,我们希望去除重复元素:

List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 4, 5, 3, 6);List<Integer> uniqueNumbers = numbers.stream().distinct().collect(Collectors.toList());System.out.println(uniqueNumbers); // 输出:[1, 2, 3, 4, 5, 6]

sorted 方法

sorted 方法用于对流中的元素进行排序。可以通过传入自定义的比较器进行排序。常用于对数据进行排序、查找最大值最小值等场景。

应用场景:

  • 对数据进行排序。

  • 查找最大值、最小值等操作。

示例代码:

假设有一个字符串列表,我们希望按照字符串的长度进行排序:

List<String> strings = Arrays.asList("Java", "Python", "C++", "JavaScript", "Ruby");List<String> sortedStrings = strings.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList());System.out.println(sortedStrings); // 输出:[Java, C++, Ruby, Python, JavaScript]

总结

Java 8 Stream API提供了丰富的方法来处理集合数据,本文介绍了其中几个常用的方法,通过对这些方法的学习和掌握,我们可以更加灵活地操作数据流,提高代码的可读性和可维护性。在实际应用中,根据具体的业务需求选择合适的方法来处理数据,将会极大地提高开发效率和代码质量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com