美文网首页
Java8 的各种骚操作(List->Map、过滤、类型转

Java8 的各种骚操作(List->Map、过滤、类型转

作者: Cocoonshu粽子 | 来源:发表于2018-12-17 13:25 被阅读10次

    前言

    自从项目引入Java8,就想用一些骚气的语法糖,故总结一下~方便日后查找

    数据结构准备

    public class Item {
        private Long id;
        private String name;
        private Double score;
        private BigDecimal bigDecimal;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Double getScore() {
            return score;
        }
    
        public void setScore(Double score) {
            this.score = score;
        }
    
        public BigDecimal getBigDecimal() {
            return bigDecimal;
        }
    
        public void setBigDecimal(BigDecimal bigDecimal) {
            this.bigDecimal = bigDecimal;
        }
    }
        /**
         * init List
         * @return
         */
        private List<Item> initList(){
            List<Item> itemList = new ArrayList<>();
            for (int i=0;i<10;i++){
                Item item = new Item();
                item.setId((long) i);
                item.setName("Test"+i);
                item.setScore(Math.random());
                item.setBigDecimal(new BigDecimal(Math.random()));
                itemList.add(item);
            }
            return itemList;
        }
    

    List 转Map

        /**
         *  * List -> Map
         *  * 需要注意的是:
         *  * toMap 如果集合对象有重复的key,会报错Duplicate key ....
         *  *  apple1,apple12的id都为1。
         *  *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
         */
        private void listToMap(){
            List<Item> itemList = initList();
            Map<Long,Item> itemMap =  itemList.parallelStream().collect(Collectors.toMap(Item::getId, item -> item,(k1, k2)->k1));
        }
    

    过滤

        /**
         * 从集合中过滤出来符合条件的元素:
         */
        private void filter(){
            List<Item> itemList = initList();
            List<Item> itemFilter =itemList.parallelStream().filter(item -> item.getId()!=null).filter(item -> item.getId()>0).collect(Collectors.toList());
        }
    

    类型转换

        /**
         * 类型转换
         */
        private void typeConversion(){
            List<String> stringList = new ArrayList<>();
            List<Long> longList = stringList.parallelStream().map(Long::valueOf).collect(Collectors.toList());
        }
    

    分组

        /**
         * 分组
         */
        private void groupingBy(){
            List<Item> itemList = initList();
            Map<Long,List<Item>> itemMap = itemList.parallelStream().collect(Collectors.groupingBy(Item::getId));
        }
    

    求和

        /**
         * 属性求和
         */
        private void sum(){
            List<Item> itemList = initList();
            BigDecimal totalBigDecimal =  itemList.parallelStream().map(Item::getBigDecimal).reduce(BigDecimal.ZERO,BigDecimal::add);
            itemList.parallelStream().mapToDouble(Item::getScore).sum();
        }
    

    相关文章

      网友评论

          本文标题:Java8 的各种骚操作(List->Map、过滤、类型转

          本文链接:https://www.haomeiwen.com/subject/takghqtx.html