前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Stream流在日常开发中的使用

Stream流在日常开发中的使用

作者头像
灬沙师弟
发布2024-06-04 19:05:40
1230
发布2024-06-04 19:05:40
举报
文章被收录于专栏:Java面试教程

前言

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

map 方法

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

应用场景:

  • 从对象列表中提取某个属性值。
  • 对流中的元素进行转换操作。

示例代码:

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

代码语言:javascript
复制
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 方法用于将流中的每个元素映射为一个流,然后将这些流扁平化为一个流。常用于处理嵌套集合、合并多个流等场景。

应用场景:

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

示例代码:

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

代码语言:javascript
复制
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 方法用于过滤流中的元素,保留满足指定条件的元素。常用于条件筛选、数据过滤等场景。

应用场景:

  • 根据特定条件筛选流中的元素。
  • 过滤掉不符合条件的数据。

示例代码:

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

代码语言:javascript
复制
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 对象,我们希望在它包含值的情况下打印出该值:

代码语言:javascript
复制
Optional.ofNullable("Hello, world!")
  .ifPresent(System.out::println);
// 输出:Hello, world!

groupingBy 方法

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

应用场景:

  • 根据特定条件对数据进行分组。
  • 进行数据统计、分析等操作。

示例代码:

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

代码语言:javascript
复制
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 方法用于去除流中重复的元素,保留唯一的元素。常用于数据去重、唯一性检查等场景。

应用场景:

  • 去除流中的重复元素。
  • 进行数据唯一性检查。

示例代码:

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

代码语言:javascript
复制
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 方法用于对流中的元素进行排序。可以通过传入自定义的比较器进行排序。常用于对数据进行排序、查找最大值最小值等场景。

应用场景:

  • 对数据进行排序。
  • 查找最大值、最小值等操作。

示例代码:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • map 方法
  • flatMap 方法
  • filter 方法
  • ifPresent 方法
  • groupingBy 方法
  • distinct 方法
  • sorted 方法
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档