Stream集合的一些经常使用操做记录(属性去重从新生成、等...)

2021年09月15日 阅读数:3
这篇文章主要向大家介绍Stream集合的一些经常使用操做记录(属性去重从新生成、等...),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1.Collectors.collectingAndThenjava

下面例子是:在UserEntity的集合中,根据Id属性去重,生成一个新的集合app

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:ide

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/108867857spa

 

 

 

 

 

 

 

 

--.net