• java8 用法小结


    一 简单的stream

    parallelStream慎用,除非你知道它内部干了什么
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
            list.parallelStream().forEach(System.out::println);
            list.parallelStream().forEachOrdered(System.out::println);
    6
    5
    7
    8
    3
    1
    4
    2
    ---------
    1
    2
    3
    4
    5
    6
    7
    8
    输出结果

    二 简单的stream, collect, sum, count, groupBy, partition

    假设有一个这样的对象流:

    +----------+------------+-----------------+
    | Name     | Age        | Address         |
    +----------+------------+-----------------+
    | aa       | 11         | shanghai        |
    | bb       | 61         | beijing         |
    | cc       | 30         | dalian          |
    | dd       | 90         | dalian          |
    +----------+------------+-----------------+

    (1)初始化
            List<User> userList = Stream.of(
                    new User("aa", 11, "shanghai"),
                    new User("bb", 61, "beijing"),
                    new User("cc", 30, "dalian"),
                    new User("dd", 90, "dalian")
            ).collect(Collectors.toList());
    (2)取某一字段 stream & collect
            System.out.println(userList.stream().map(User::getAddress).collect(Collectors.toList()));
            System.out.println("---------");
            ArrayList<String> arrayList = userList.stream().map(User::getAddress).collect(Collectors.toCollection(ArrayList::new));
            System.out.println(arrayList);
            System.out.println("---------");
            System.out.println(userList.stream().map(User::getAddress).collect(Collectors.joining("@@")));
    [shanghai, beijing, dalian, dalian]
    ---------
    [shanghai, beijing, dalian, dalian]
    ---------
    shanghai@@beijing@@dalian@@dalian
    输出结果
    (3)取总和 sum
            System.out.println(userList.stream().mapToInt(User::getAge).sum());
    192
    输出结果
    (3)分组
            Map<String, List<User>> addressMap = userList.stream().collect(Collectors.groupingBy(User::getAddress));
    System.out.println(addressMap);
    {shanghai=[User[name=aa,address=shanghai]], dalian=[User[name=cc,address=dalian], User[name=dd,address=dalian]], beijing=[User[name=bb,address=beijing]]}
    输出结果
    (4)分组取和,平均数
            Map<String, Long> addressCountMap = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.counting()));
            System.out.println(addressCountMap);
    
            Map<String, Double> map = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.averagingInt(User::getAge)));
            System.out.println(map);
    {shanghai=1, dalian=2, beijing=1}
    {shanghai=11.0, dalian=60.0, beijing=61.0}
    输出结果
    (5)分区 分区是一种特殊的分组,结果 map 至少包含两个不同的分组——一个true,一个false
            Map<Boolean, List<User>> partitionMap = userList.stream().collect(Collectors.partitioningBy(user -> Objects.equals(user.getAddress(), "beijing")));
            System.out.println(partitionMap);
            System.out.println(partitionMap.get(true));
    
            Map<Boolean, Map<String, Long>> partitionGroupByMap = userList.stream()
                    .collect(Collectors.partitioningBy(user -> user.getAge() < 70, Collectors.groupingBy(User::getAddress, Collectors.counting())));
            System.out.println(partitionGroupByMap);
    {false=[User[name=aa,address=shanghai], User[name=cc,address=dalian], User[name=dd,address=dalian]], true=[User[name=bb,address=beijing]]}
    [User[name=bb,address=beijing]]
    {false={dalian=1}, true={shanghai=1, dalian=1, beijing=1}}
    输出结果
    
    


  • 相关阅读:
    Android 源码阅读之MMS细读TransactionService.java
    [Java2 入门经典]第16章 线程
    Android 源码阅读之建立3G网络流程
    从架构上看Android多媒体播放器
    Android 开发日志之仿三星Launcher
    非常适合OA系统的菜单
    模拟动网当前位置下拉菜单
    模拟windows菜单选项卡效果
    TreeView的各种操作
    ASCII表
  • 原文地址:https://www.cnblogs.com/balfish/p/7792477.html
Copyright © 2020-2023  润新知