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


总结

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
106 0
|
7月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
197 3
|
9月前
|
前端开发 开发者
CSS列表属性:list-style系列属性详解
CSS列表属性:list-style系列属性详解
455 40
|
7月前
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
|
9月前
|
Java
java操作list使用Stream
java操作list使用Stream
|
10月前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
10月前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
60 6
|
10月前
【stream】List根据某个字段求和
【stream】List根据某个字段求和
476 0
|
10月前
|
SQL Java
【SpringBoot】List<实体类>如何去重,单、多属性去重
【SpringBoot】List<实体类>如何去重,单、多属性去重
595 0
|
10月前
|
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
414 1