zoukankan      html  css  js  c++  java
  • Java8新特性——stream流

    一、基本API初探

    package java8.stream;
    
    import java.util.Arrays;
    import java.util.IntSummaryStatistics;
    import java.util.List;
    import java.util.Random;
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    
    /**
     * @author jiaqing.xu@hand-china.com
     * @version 1.0
     * @name
     * @description
     * @date 2018/7/15
     */
    public class BasicTest {
        public static void main(String[] args) {
    
            //创建串行流
            List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
            List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
            filtered.forEach(System.out::println);
    
            //使用foreach进行数据迭代 limit 方法用于获取指定数量的流
            Random random = new Random();
            random.ints().limit(10).forEach(System.out::println);
    
            //Map用于映射每个元素对应的结果,原值为i 映射到i*i .collect(Collectors.toList()):将stream再转换回list集合
            List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            // 获取对应的平方数
            List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().limit(2).collect(Collectors.toList());
            squaresList.forEach(System.out::println);
    
            //filter 方法用于通过设置的条件过滤出元素
            List<String> stringList = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
            // 获取空字符串的数量
            Long count = stringList.stream().filter(string -> string.isEmpty()).count();
            System.out.println("The count of empty string:"+count);
    
    
            //sorted用于对流进行排序,默认是从小到大
            List<Integer> array = Arrays.asList(1,3,2,4);
            List<Integer> sortedList = array.stream().sorted().collect(Collectors.toList());
            sortedList.forEach(System.out::println);
    
            //流并行处理程序parallelStream
            List<String> stringList2 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
            // 获取空字符串的数量
            Long count2 = stringList2.parallelStream().filter(string -> string.isEmpty()).count();
            System.out.println("The count of empty string:"+count2);
    
    
            //collectors 可以返回列表或者字符串
            List<String> stringList3 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
            String mergedString = stringList3.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
            System.out.println("合并字符串: " + mergedString);
    
            //
            int[] numberList =  {12,3,34,67,100,99};
    
            IntStream intStream = IntStream.of(numberList);
            IntSummaryStatistics stats = intStream.summaryStatistics();
    
            System.out.println("列表中最大的数 : " + stats.getMax());
            System.out.println("列表中最小的数 : " + stats.getMin());
            System.out.println("所有数之和 : " + stats.getSum());
            System.out.println("平均数 : " + stats.getAverage());
        }
    }

    二、分组和合并

     1 /**
     2  * @author jiaqing.xu@hand-china.com
     3  * @version 1.0
     4  * @name
     5  * @description 分组、合并测试dto
     6  * @date 2018/7/15
     7  */
     8 public class Foo {
     9 
    10     private int code;
    11 
    12     private int count;
    13 
    14     public Foo(int code, int count) {
    15         this.code = code;
    16         this.count = count;
    17     }
    18 
    19     public int getCode() {
    20         return code;
    21     }
    22 
    23     public void setCode(int code) {
    24         this.code = code;
    25     }
    26 
    27     public int getCount() {
    28         return count;
    29     }
    30 
    31     public void setCount(int count) {
    32         this.count = count;
    33     }
    34 
    35     @Override
    36     public String toString() {
    37         return "Foo{" +
    38                 "code=" + code +
    39                 ", count=" + count +
    40                 '}';
    41     }
    42 }
    /**
     * @author jiaqing.xu@hand-china.com
     * @version 1.0
     * @name
     * @description 测试分组和合并  groupingBy方法以及reduce方法
     * @date 2018/7/15
     */
    public class TestFoo {
        public static void main(String[] args) {
            Foo foo1 = new Foo(1, 2);
            Foo foo2 = new Foo(2, 23);
            Foo foo3 = new Foo(2, 6);
            List<Foo> list = new ArrayList<>(4);
            list.add(foo1);
            list.add(foo2);
            list.add(foo3);
            Map<Integer, List<Foo>> collect = list.stream().collect(Collectors.groupingBy(Foo::getCode));
            //存储最后的汇总结果集合
            List<Foo> result = new ArrayList<>();
            collect.forEach((k,v)->{
                Optional<Foo> sum = v.stream().reduce(
                        (v1, v2) -> {  //合并
                            v1.setCount(v1.getCount()+v2.getCount());
                            return v1;
                        }
                );
                result.add(sum.orElse(new Foo(0,10)));
            });
            result.forEach(System.out::print);
    
        }
    }

    将2号记录的count值进行了合并汇总!23+6=29

  • 相关阅读:
    IPC之——消息队列
    特殊命令
    面试概念集锦
    守护进程(精灵进程)
    IP SSL HTTPS
    钉钉监控样例
    中间人攻击
    iptables firewalld
    简单暴力高效率的OSM全球地图
    解决ubuntu使用命令sudo apt -get install 安装东西时出现"E: Sub-process /usr/bin/dpkg returned an error code (1) "的错误 问题描述:
  • 原文地址:https://www.cnblogs.com/jiaqingshareing/p/9313569.html
Copyright © 2011-2022 走看看