Stream集合的一些常用操作記錄(屬性去重重新生成、等...)

1.Collectors.collectingAndThen

下面例子是:在UserEntity的集合中,根據Id屬性去重,生成一個新的集合

package com.test.lamdba;

import com.test.entity.UserEntity;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;

public class TestCollectors {

    /**
     * 在UserEntity的集合中,根據Id屬性去重,生成一個新的集合
     *
     * @param args
     */
    public static void main(String[] args) {
        List<UserEntity> userEntityList = new ArrayList<>();
        userEntityList.add(new UserEntity("1", "zhangsan"));
        userEntityList.add(new UserEntity("2", "lisi"));
        userEntityList.add(new UserEntity("3", "wangwu"));
        userEntityList.add(new UserEntity("4", "zhaoliu"));
        userEntityList.add(new UserEntity("2", "sunqi"));
        userEntityList.add(new UserEntity("3", "qianba"));


        /**
         * 根據Id屬性去重,生成一個新的集合
         */
        ArrayList<UserEntity> result = userEntityList.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(UserEntity::getId))),
                        ArrayList::new
                )
        );

        result.forEach(System.out::println);
        System.out.println("---------------------------------------");


        /**
         * 上線方法看着過於複雜,把他改成匿名函數的形式寫下,便於看懂
         */
        ArrayList result2 = userEntityList.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(new Supplier<TreeSet<UserEntity>>() {
                    @Override
                    public TreeSet<UserEntity> get() {
                        return new TreeSet<>(Comparator.comparing(UserEntity::getId));
                    }
                }),
                new Function<TreeSet<UserEntity>, ArrayList>() {
                    @Override
                    public ArrayList apply(TreeSet treeSet) {
                        return new ArrayList(treeSet);
                    }
                }
        ));

        result2.forEach(System.out::println);
    }

} 

Console:

UserEntity(id=1, name=zhangsan)
UserEntity(id=2, name=lisi)
UserEntity(id=3, name=wangwu)
UserEntity(id=4, name=zhaoliu)
---------------------------------------
UserEntity(id=1, name=zhangsan)
UserEntity(id=2, name=lisi)
UserEntity(id=3, name=wangwu)
UserEntity(id=4, name=zhaoliu) 

對於Collectors.collectingAndThen、toCollection的使用參考了以下博客:

https://blog.csdn.net/qq_35634181/article/details/108867857

 

 

 

 

 

 

 

 

--

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章