Java1.8对List集合操作汇总

1、去重

List<String> myList = listAll.stream().distinct().collect(Collectors.toList());

2、根据单个对象属性去重

list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<UserCar>(Comparator.comparing(UserCar::getCarNo))), ArrayList::new));

或者

list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o->o.getCarNo()))), ArrayList::new));

3、根据多个对象属性去重

list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o->o.getDetailID()+ ";" + o.receiptCode()))),ArrayList::new));

4、根据单个对象属性合并

list.stream().collect(Collectors.toMap(BillsNums::getId, a -> a, (o1,o2)-> {
o1.setNums(o1.getNums() + o2.getNums());
o1.setSums(o1.getSums() + o2.getSums());
return o1;
})).values().stream().collect(Collectors.toList());

5、根据多个对象属性合并

list.parallelStream().collect(Collectors.groupingBy(o -> (o.geName() + o.getAge()), Collectors.toList())).forEach((id, transfer) -> { transfer.stream().reduce((a, b) -> new Student(a.getName(), a.getAge(), a.getScore() + b.getScore())).ifPresent(studentList::add);});
 或使用Map:需重写hashCode()、equals()方法

原因移步另一篇文章:Java中将对象当成map的key存在的问题与解决方案

    //新建类,作为map的key
    static class Temp {
        private String period;//会计期间
        private String dept;//部门
        private String fund;//资金用途
        private String currency;//币别

        public String getPeriod() {
            return period;
        }

        public void setPeriod(String period) {
            this.period = period;
        }

        public String getDept() {
            return dept;
        }

        public void setDept(String dept) {
            this.dept = dept;
        }

        public String getFund() {
            return fund;
        }

        public void setFund(String fund) {
            this.fund = fund;
        }

        public String getCurrency() {
            return currency;
        }

        public void setCurrency(String currency) {
            this.currency = currency;
        }

        //重写hashcode方法
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((period == null) ? 0 : period.hashCode());
            result = prime * result + ((dept == null) ? 0 : dept.hashCode());
            result = prime * result + ((fund == null) ? 0 : fund.hashCode());
            result = prime * result + ((currency == null) ? 0 : currency.hashCode());
            return result;
        }

        //重写equals方法
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Temp other = (Temp) obj;
            if (period == null) {
                if (other.period != null)
                    return false;
            } else if (!period.equals(other.period))
                return false;
            if (dept == null) {
                if (other.dept != null)
                    return false;
            } else if (!dept.equals(other.dept))
                return false;
            if (fund == null) {
                if (other.fund != null)
                    return false;
            } else if (!fund.equals(other.fund))
                return false;
            if (currency == null) {
                if (other.currency != null)
                    return false;
            } else if (!currency.equals(other.currency))
                return false;
            return true;
        }
    }


    @Override
    public void method() {
        List<DynamicObject> list = new ArrayList<>();
        Map<Temp, DynamicObject> map = new HashMap<>();
        for (DynamicObject entryItem : entry) {
            Temp temp = new Temp();
            temp.setPeriod(dateStr);
            temp.setCurrency(currency);
            temp.setDept(dept);
            temp.setFund(fund);
            if (map.containsKey(temp)) {
//累加实付金额
                entryItem.set(KEY_PAY_SFJE, map.get(temp).getBigDecimal(KEY_PAY_SFJE).add(entryItem.getBigDecimal(KEY_PAY_SFJE)));
            }
            map.put(temp, entryItem);
        }
        for (Map.Entry<Temp, DynamicObject> entry : map.entrySet()) {
            list.add(entry.getValue());
        }
    }

6、根据对象属性值获取对象

Optional<User> first = list.stream().filter(user -> Objects.equals(user.getId(),1)).findFirst();
//判空
if(first.isPresent()) {
System.out.println(first.get());
}

 

posted @ 2022-09-16 14:09  小牛同学丶  阅读(259)  评论(0编辑  收藏  举报