java8 stream实现列表去重,java8的stream 和lambda的使用实例

java8 stream实现列表去重,java8的stream 和lambda的使用实例

不管我们做安卓开发还是javaweb开发,有时候我们会对列表进行去重操作,所谓的列表数据重复,通常体现在列表集合数据中的id属性相同。当然我们通过普通的方式也可以达到去重的效果。但是借助java8新特性可以很方便的实现列表去重,下面就写个小demo简单的演示一下。

主要实现代码

List<Person> persons = new ArrayList();
       List<Integer> ids = new ArrayList<>();//用来临时存储person的id
       persons.add(new Person(1, "name1", 10));
       persons.add(new Person(2, "name2", 21));
       persons.add(new Person(5, "name5", 55));
       persons.add(new Person(3, "name3", 34));
       persons.add(new Person(1, "name1", 10));

       List<Person> personList = persons.stream().filter(// 过滤去重
               v -> {
                   boolean flag = !ids.contains(v.getId());
                   ids.add(v.getId());
                   return flag;
               }
       ).collect(Collectors.toList());
       System.out.println(personList);
复制代码

运行后的打印如下.可以看出id为1时的重复数据已经被过滤掉了

[
Person{id=1, name='name1', age=10},
Person{id=2, name='name2', age=21}, 
Person{id=5, name='name5', age=55}, 
Person{id=3, name='name3', age=34}
]

复制代码

person类的代码如下

package com.qcl.demo;

/**
 * Created by qcl on 2018/3/26.
 */
public class Person {

    private int id;
    private String name;
    private int age;

    public Person() {
    }

    public Person(int id, String name, int age) {
        this.id = id;

        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' + ", age=" + age + '}'; } } 复制代码

这只是java8在我们开发时比较常用的一个操作。

如下面这个例子使用也比较普遍

获取person集合中的所有大于18周岁,并排序
List<Person> persons = new ArrayList();
persons.add(new Person(1, "name1", 10));
persons.add(new Person(2, "name2", 21));
persons.add(new Person(5, "name5", 55));
persons.add(new Person(3, "name3", 34));
persons.add(new Person(4, "name4", 6));
persons.stream()
        .filter(p -> p.getAge() >= 18)//获取所有18岁以上的用户
        .sorted(Comparator.comparing(Person::getAge))//依年纪升序排序
        .sorted(Comparator.comparing(Person::getAge).reversed())//依年纪降序排序
        .collect(Collectors.toList())
        .forEach(System.out::println);

boolean isAllAdult = persons.stream().
        allMatch(p -> p.getAge() > 18);
System.out.println("是否所有的用户都大于18岁" + isAllAdult);
复制代码

总结:java8的使用,对于我们操作集合,数组提供了很大的便利。建议大家有机会多去了解下java8的新特性。

转载于:https://juejin.im/post/5ab8baa66fb9a028c06ad0d2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101748.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释

    LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释1、扩频因子(SF)2、编码率(CR)3、信号带宽(BW)4、LoRa信号带宽BW、符号速率Rs和数据速率DR的关系5、LoRa信号带宽、扩频因子和编码率的设定6、空中速率针对特定应用,开发人员可通过调制扩频因子、调制带宽、纠错编码率这三个关键设计参数,对LoRa调制解调技术进行优化。。…

    2022年10月10日
    0
  • 成功解决IDEA2022 Plugins 连不上、打不开「建议收藏」

    成功解决IDEA2022 Plugins 连不上、打不开「建议收藏」解决IntelliJIDEA2020.1插件中心一直打不开

    2022年10月21日
    0
  • 3D视频编码(3d打印技术介绍)

    3D-HEVC编码框架3D-HEVC编码结构是对HEVC的扩展,每个视点纹理及深度图编码主要采用HEVC编码框架,但在其基础上增加了一些新的编码技术,使其更有利于深度图和多视点的编码。图13D-HEVC编码结构如上图所示,3D-HEVC编解码结构和MVC类似。图中所有输入的视频图像和深度图像是同一时刻,不同拍摄位置的场景,这些图像组成一个存取层。在同一个存取层中,首先对独立视点(基准视点…

    2022年4月13日
    46
  • 故障解决 | win10没声音及找不到Realtek高清音频管理器「建议收藏」

    故障解决 | win10没声音及找不到Realtek高清音频管理器「建议收藏」重装win10系统后,电脑没声音,更新驱动以及万不得已下载驱动精灵都没有解决。后来发现在“硬件和声音”中没有Realtek高清音频管理器,之后找到解决办法如下:1.找到Realtek高清音频

    2022年8月1日
    3
  • linux 系统进行make menuconfig的时候出错

    linux 系统进行make menuconfig的时候出错错误信息:(ps:当前系统:Linuxlabpc4.13.0-36-generic#40~16.04.1-UbuntuSMPFriFeb1623:25:58UTC2018x86_64x86_64x86_64GNU/Linux)HOSTCCscripts/kconfig/mconf.oInfileincludedfromscripts/kc…

    2022年5月25日
    31
  • Spidermonkey_typemonkey

    Spidermonkey_typemonkeyhttps://technotales.wordpress.com/2009/06/07/spidermonkey-introduction/https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/JSAPI_User_Guidehttps://developer.mozilla.org/en-…

    2022年8月31日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号