JDK8 Stream之如何给List属性去重?

简介: JDK8 Stream之如何给List属性去重?

写在前面


上篇文章我们开始讲解了JDK中的Stream流的两个方法的区别,今天我们接着来看JDK8-Stream中的一些使用方案。


问题


今日问题是:Stream流如何针对List某个对象属性进行去重操作,并且输出单一属性的集合对象。


如何解决


问题已经抛出来了,那么如何解决呢?


让我们分成几步来逐一解决一下。


先解决输出单一属性的集合对象问题,这个更简单一些,用普通的方式我们是应该怎么写呢?


来看如下代码示例:


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test {
    private String name;
    private String pwd;
    public static void main(String[] args) {
        List<Test> list = new ArrayList<>();
        List<String> resultList = new ArrayList<>();
        list.add(new Test("张三", "123456"));
        list.add(new Test("张三1", "123456"));
        list.add(new Test("张三2", "123456"));
        list.add(new Test("张三2", "123456"));
        list.add(new Test("张三3", "123456"));
        list.add(new Test("张三4", "123456"));
        list.add(new Test("张三4", "123456"));
        for (Test test : list){
            resultList.add(test.getName());
        }
        System.out.println(resultList.toString());
    }
}


以上方式是普通写法,利用循环来获取属性并放入新的集合中。


如果使用Stream流的话,那就不一样了,我们可以通过一行代码就能获取到相应的结果了。


来看一下示例吧:


List<String> resultList = list.stream().map(Test::getName).collect(Collectors.toList());


一行代码搞定,接下来我们再来看一下如何去重其中的重复属性吧。


现在我们已经获得了resultList集合,其中有着所有的Name属性值,但是其中存在一些重复值,这时候我们使用Stream中的哪个方法呢?


很简单,Stream流提供了一个distinct方法,用于将集合去重操作。


代码如下:


List<String> resultList = list.stream().map(Test::getName).distinct().collect(Collectors.toList());


我们在map方法后加入了一个distinct方法,这样就可以做到去重操作了。


来看一下运行结果:

image.png


总结

今天的问题就是这些了,你还有其他的去重方案吗?


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
221 0
|
前端开发 开发者
CSS列表属性:list-style系列属性详解
CSS列表属性:list-style系列属性详解
701 40
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
316 3
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
122 0
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
java操作list使用Stream
java操作list使用Stream
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
134 6
|
Java API
java 对象list 使用stream进行过滤
在Java中,你可以使用Stream API对对象列表进行过滤。假设你有一个`List<MyObject>`,并且你想根据某些条件过滤出特定的对象。以下是一个示例: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<MyObject> myObjects = ... // 初始化你的对象列表 List<MyObject> filter
539 1
【stream】List根据某个字段求和
【stream】List根据某个字段求和
733 0
|
SQL Java
【SpringBoot】List<实体类>如何去重,单、多属性去重
【SpringBoot】List<实体类>如何去重,单、多属性去重
883 0