zoukankan      html  css  js  c++  java
  • Lists.transform的使用

        // transform 实现: List<Integer> numList = Lists.transform(mapList, s -> Integer.valueOf(s.get("valueItem") + "")); 
        //还原:
            List<Map<String, Object>> mapList = Lists.newArrayList();
            Map<String, Object> map1 = Maps.newHashMap();
            map1.put("nameItem", "香蕉");
            map1.put("valueItem", 2);
            mapList.add(map1);
            Map<String, Object> map2 = Maps.newHashMap();
            map2.put("nameItem", "香蕉");
            map2.put("valueItem", 3);
            mapList.add(map2);
    
            Set<Integer> set = new HashSet<>();
    
            List<Object> value1 = mapList.stream()
                    .map(o -> {
                        Optional<Object> option = o.entrySet().stream()
                        .findAny()// .findAny()获得是Optional,然后对Optional调用map方法获得的是Optional,而Optional里面的值为null,再调用orElse方法却不会出现问题
                                .filter(m -> m.getKey().equals("valueItem"))
                                .map(i -> {
                                    Object value2 = i.getValue();
                                    return value2;
                                })
    //                            .orElse("") //亦可以用orElse
                                ;
                        option.ifPresent(r -> set.add(Integer.valueOf(r + "")));//存在则直接调用
                        return option.get();
                    }).collect(Collectors.toList());
            System.out.println("-1->" + set); //2,3
            System.out.println("-1->" + value1);
        }
    
     

    转自:https://blog.csdn.net/weixin_42201566/article/details/81513769

    Lists.transform:能够轻松的从一种类型的list转换为另一种类型的list。

    使用场景:

    1、把一个List<Map<String,String>> 中的  所有map对应某个key的value值取出来 返回一个新的list

    Map<String,String> map = Maps.newHashMap();
            map.put("1","test1");
            map.put("2","test2");
            Map<String,String> map2 = Maps.newHashMap();
            map2.put("1","test3");
            map2.put("4","test2");
            List<Map<String,String>> list2=Lists.newArrayList();
            list2.add(map);
            list2.add(map2);
            List<String> list3=Lists.transform(list2,s->s.get("1"));
            list3.forEach(s -> System.out.println(s));

    2、通常可以使用Lists.transform把对象list中的某个属性取出来  返回一个新的list:如下代码

    public static void main(String[] args) {
     
    List<Result> resultList=Lists.newArrayList(new Result(1,"test1"),new Result(2,"test2"),new Result(3,"test3"));
    //将一个list转化为另外一个list
    List<String> nameList=Lists.transform(resultList,tuple -> tuple.getNameStr());
     
            nameList.forEach(s -> System.out.println(s));
            System.out.println("============");
            resultList.forEach(result -> {
                result.setNameStr("reset");
            });
            nameList.forEach(s -> System.out.println(s));
     
    }
     
     
     
     
     
     
    class Result{
        private Integer id;
        private String nameStr;
     
        public Result(Integer id, String nameStr) {
            this.id = id;
            this.nameStr = nameStr;
        }
     
        public Integer getId() {
            return id;
        }
     
        public void setId(Integer id) {
            this.id = id;
        }
     
        public String getNameStr() {
            return nameStr;
        }
     
        public void setNameStr(String nameStr) {
            this.nameStr = nameStr;
        }
     
    }
    •  

    结果:

    test1
    test2
    test3
    ============
    reset
    reset
    reset

    结论:

    当Lists.transform()处理的list的值发生改变,那么Lists.transform()处理的结果也会发生改变

  • 相关阅读:
    hdu4829 带权并查集(题目不错)
    hdu4829 带权并查集(题目不错)
    洛谷 P1076 寻宝(模拟 && 剪枝)
    洛谷 P1981 表达式求值(模拟)
    洛谷 P2239 螺旋矩阵(模拟 && 数学)
    洛谷 P2118 比例简化(枚举)
    洛谷 P3956 棋盘(记忆化搜索)
    洛谷 P5018 对称二叉树(搜索)
    洛谷 P5016 龙虎斗(模拟)
    洛谷 P1563 玩具谜题(模拟)
  • 原文地址:https://www.cnblogs.com/hahajava/p/9652707.html
Copyright © 2011-2022 走看看