Java8 集合类型转换和对象属性映射总结

1.  List的类型转换:List list= new  ArrayList();


    1.1  谷歌的 

   List userId = Lists.transform(list, new com.google.common.base.Function() {
            @Override
            public Long apply(String input) {
                return Long.valueOf(input);
            }
        });


    1.2   流式处理

    List userIds = list.stream().map(Long::valueOf).collect(Collectors.toList());
    
    1.3  流式处理

    List userIdss = list.stream().map(x ->Long.parseLong(x)).collect(Collectors.toList());
 
2.   对象和属性的映射
    2.1  对象属性映射为Map:
    Map tagMap = users.stream().filter(x ->StringUtils.isNotBlank(x.getEcTagId())).
    collect(Collectors.toMap(EcUser ::getMobile,EcUser ::getEcTagId,(k1,k2) ->k2));   
    ((k1,k2) ->k2   k值相同时,取k2的值,不指定时,会报异常:java.lang.IllegalStateException: Duplicate key)

    2.2  对象的属性和对象互相绑定映射:


    Map customerNoMap = listEc.stream().filter(x->StringUtils.isNotBlank(x.getCustomerNo()))
    .collect(Collectors.toMap(EcStaticsOrder::getCustomerNo,order -> order,(k1,k2) -> k2));
    还有一个:
    public Map getNameAccountMap(List accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity()));
    }
    
    2.3  对象按某一属性分组:分组之后是多个,需要List 来接收


    Map> mapUser = addList.stream().collect(Collectors.groupingBy(EcUser :: getErpCode));
    
    2.4 toMap还有另一个重载方法,可以指定一个Map的具体实现,来收集数据:

    public Map getNameAccountMap(List accounts) {
        return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
    }
    
3.  List的分片


    3.1  谷歌出品必属精品的Guava:  List> newList = Lists.partition(list, 3);
    
    3.2   Apache的commons:    List> newList = ListUtils.partition(list, 3);
    
    3.3   国产的神级框架Hutool:        List> newList = ListUtil.partition(OLD_LIST, 3);
    
    3.4   Java8的stream:使用具有局限性,只能简单的分片(只能分两组),并且要有明确的分片条件,
    比如下面的例子就是将大于3和小于3的划分两组。优点就是不依赖任何框架。
        private static final List OLD_LIST = Arrays.asList(1, 2, 3, 4, 5, 6);
        
        Map> newMap = OLD_LIST.stream().collect(
                Collectors.partitioningBy(i -> i > 3)
        );


    3.5   还有一个就是list自带(JDK 自带的 subList 方法)的截取api,也可以实现自定义的分片工具类。    

                                          日常积累,后续继续更新!欢迎批评指正,共同进步!

你可能感兴趣的:(工具,java,开发语言,后端,算法,数据结构)