java8 Stream

	List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
    //统计集合的最大值,最小值,总和,平均值等
    IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
    System.out.println(stats);

    //统计个数
    Map<Integer, List<Integer>> collect = numbers.stream().collect(Collectors.groupingBy(Integer::intValue));
    for (Map.Entry<Integer, List<Integer>> integerListEntry : collect.entrySet()) {
        System.out.println(integerListEntry.getKey() +" > " +integerListEntry.getValue().size());
    }

    System.out.println("====================");
    //字符串拆分成list,统计个数,再倒序排序
    String str = "aaabbcccaccbbbbb";
    List<Map.Entry<String, Integer>> strCountList =
            Arrays.stream(str.trim().split("")).collect(Collectors
                    .groupingBy(st -> st,
                            Collectors.collectingAndThen(Collectors.toList(), List::size))).entrySet().stream()
                    .sorted(Map.Entry.<String, Integer>comparingByValue()
                            .reversed()).collect(Collectors.toList());

    //统计元素出现次数做多的
    strCountList.stream().findFirst().ifPresent(entry ->
            System.out.println("字母{" + entry.getKey() + "}出现的次数最多,出现{" + entry.getValue() + "}次"));

    for (Map.Entry<String, Integer> stringIntegerEntry : strCountList) {
        System.out.println(stringIntegerEntry.getKey() +" > " +stringIntegerEntry.getValue());
    }

    //字符串List统计个数
    List<String> list = Arrays.asList("zhangsan","lisi","wangbninwei","zhangsan","zhangsan","wangbninwei","留底","test");
    Map<String, Integer> collectName = list.stream().collect(Collectors.groupingBy(name -> name, Collectors.collectingAndThen(Collectors.toList(), List::size)));
    System.out.println(collectName);
### Java 8 Stream API 使用教程 #### 创建流 创建流的方式有多种,可以通过集合类的 `stream()` 方法获取流实例。 ```java List<String> list = Arrays.asList("apple", "banana", "orange"); Stream<String> stream = list.stream(); ``` 对于数组,则可以使用静态方法 `Arrays.stream` 或者 `Stream.of`. ```java String[] array = {"apple", "banana", "orange"}; Stream<String> streamFromArray = Arrays.stream(array); // or Stream<String> streamOfArray = Stream.of(array); ``` #### 中间操作 中间操作返回一个新的流对象,在此之后还可以继续调用其他的操作。常见的中间操作包括但不限于: - **filter**: 过滤掉不符合条件的元素[^1] ```java Stream<String> filteredStream = stream.filter(s -> s.startsWith("a")); ``` - **map**: 将每一个输入元素按照指定映射关系转换成另一个输出元素 ```java Stream<Integer> lengthStream = stream.map(String::length); ``` - **peek**: 对每个元素执行某些动作并传给下游,通常用于调试目的[^2] ```java Stream<String> peekedStream = stream.peek(System.out::println); ``` #### 终端操作 终端操作会触发实际计算过程,并关闭流。一旦执行了一个终端操作后就不能再对该流做任何进一步的操作了。一些常用的终端操作如下所示: - **forEach**: 遍历整个序列中的每一项 ```java stream.forEach(System.out::println); ``` - **collect(Collectors.toList())**: 收集结果到列表中 ```java List<String> resultList = stream.collect(Collectors.toList()); ``` - **count()**: 计算总数目 ```java long count = stream.count(); ``` 这些只是基础部分;实际上还有更多高级特性和组合方式等待探索。通过合理运用上述概念以及所提供的例子,应该能更好地理解如何利用Java Streams简化日常开发工作流程的同时提高效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值