文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Stream流】java中Stream流详细使用方法

2023-09-29 08:43

关注

在Java中,Stream是一种用于处理集合数据的流式操作API。它提供了一种简洁、灵活、高效的方式来对集合进行各种操作,如过滤、映射、排序等。下面是一些Stream的常用功能和详细的代码示例:

  1. 创建流:

    • 从集合创建流:stream() 方法可以从集合创建一个流。

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);Stream<Integer> stream = numbers.stream();
    • 从数组创建流:Arrays.stream() 方法可以从数组创建一个流。

      int[] array = {1, 2, 3, 4, 5};IntStream stream = Arrays.stream(array);
    • 使用Stream.of()创建流:可以使用Stream.of()方法创建一个包含指定元素的流。

      Stream<String> stream = Stream.of("a", "b", "c");
  2. 过滤:

    • 使用filter()方法过滤流中的元素,只保留满足给定条件的元素。
      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);Stream<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0);
  3. 映射:

    • 使用map()方法将流中的元素进行转换。
      List<String> names = Arrays.asList("Alice", "Bob", "Charlie");Stream<Integer> nameLengths = names.stream().map(String::length);
  4. 排序:

    • 使用sorted()方法对流中的元素进行排序。
      List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);Stream<Integer> sortedNumbers = numbers.stream().sorted();
  5. 收集:

    • 使用collect()方法将流中的元素收集到一个集合中。
      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
  6. 统计:

    • 使用count()方法获取流中元素的数量。
      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);long count = numbers.stream().count();
  7. 匹配:

    • 使用anyMatch()方法判断流中是否存在满足给定条件的元素。

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);
    • 使用allMatch()方法判断流中的所有元素是否都满足给定条件。

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean allEvenNumbers = numbers.stream().allMatch(n -> n % 2 == 0);
    • 使用noneMatch()方法判断流中是否没有满足给定条件的元素。

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean noNegativeNumbers = numbers.stream().noneMatch(n -> n < 0);
  8. 分组操作和分组后再进行排序操作:

    • 假设我们有一个包含学生对象的列表,每个学生对象包含姓名和年龄属性。我们想要按照学生的年龄进行分组,并且在每个组内按照姓名进行排序。

    • 首先,我们定义一个Student类表示学生对象:

class Student {    private String name;    private int age;    public Student(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }}
import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class Main {    public static void main(String[] args) {        List<Student> students = Arrays.asList(                new Student("Alice", 20),                new Student("Bob", 18),                new Student("Charlie", 20),                new Student("David", 19),                new Student("Eve", 18)        );        // 按照年龄进行分组,并在每个组内按照姓名进行排序        Map<Integer, List<Student>> groupedAndSorted = students.stream()                .sorted(Comparator.comparing(Student::getName)) // 按照姓名排序                .collect(Collectors.groupingBy(Student::getAge)); // 按照年龄分组        // 输出分组和排序结果        groupedAndSorted.forEach((age, group) -> {            System.out.println("Age: " + age);            group.forEach(student -> System.out.println("  " + student.getName()));        });    }}
Age: 18  Bob  EveAge: 19  DavidAge: 20  Alice  Charlie

推荐一个ChatGPT使用渠道:点击直达
扫码关注公众号

来源地址:https://blog.csdn.net/kkwyting/article/details/133297260

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯