zoukankan      html  css  js  c++  java
  • java8特性

    1、Collectors.toMap 将List转Map

    public class Demo{
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
             List<UserBo> list = new ArrayList<>();
                list.add(new UserPo(100, "Mohan"));
                list.add(new UserPo(100, "Sohan"));
                list.add(new UserPo(300, "Mahesh"));
                Map<Integer, Object> map=list.stream().collect(Collectors.toMap(UserPo::getUserId, v -> v, (k,v)-> v));   
                map.forEach((k, v) -> System.out.println("Key: " + k +", value: "+ v));
     
        }
     
    }
    
    
    class UserPo{
        private int UserId;
        private String UserName;
    
           //getter/setter省略
    }

    解释:

    使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。
    toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。
    第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。
    在例子中
     .collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1));
    第一个参数UserBo::getUserId 表示选择UserBo的getUserId作为map的key值;
    第二个参数v -> v表示选择将原来的对象作为map的value值;
    第三个参数(v1, v2) -> v1中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值。

    2、分组,以某个属性来分组

    例如,以班级分组,将班级相同的放在一起:Map<Integer,List<User>>

    Map<Integer, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getGradeId));

    3、过滤Filter,从集合中过滤出来符合条件的元素

    List<User> filterList = userList.stream().filter(a -> a.getGradeId().equals("1")).collect(Collectors.toList());

     4、求和,将每个年级人数加起来

    BigDecimal totalUser = userList.stream().map(Grade::getStudents).reduce(BigDecimal.ZERO, BigDecimal::add);

    5、最大 最小值,查找集合中最大、最小值

    Collectors.maxBy 和 Collectors.minBy 来计算流中的最大或最小值

    6、去重,根据学号去重

    List<User> unique = userList.stream().collect(
    collectingAndThen(
    toCollection(() -> new TreeSet<>(comparingLong(User::getStuNo))), ArrayList::new)
    );

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/chenweichu/p/11273380.html
Copyright © 2011-2022 走看看