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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm运行环境配置_pycharm安装django

    pycharm运行环境配置_pycharm安装django1.安装Python前往https://www.python.org/downloads/release/python-383/,根据环境下载对应的python安装包安装。2.安装pycharmPycharm是一个可用作工程开发的工具。前往https://www.jetbrains.com/pycharm/,点击下图中的下载链接:分Professional和Community两个版本,deployment等功能仅前者开放。·Community版本:免费。·Professi

    2022年8月29日
    5
  • 多路复用_java多路复用

    多路复用_java多路复用1、说明socket编程的demo中使用的都是最基本的,但是一般不会真正用在项目中的代码。而实际项目中,需要面临复杂多变的需求环境,比如有多个socket连接,或者服务需要监听的时候,可能有很多so

    2022年8月3日
    10
  • python中的单引号和双引号的区别和用法_python中打印输出的语句

    python中的单引号和双引号的区别和用法_python中打印输出的语句python中的单引号和双引号的区别今天在码代码的过程中突然想到这个问题,于是上网浏览了一下,发现在python中两种表达方式是没有区别的,两种表达方式都可以用来表达一个字符串。但是这两种通用的表达方式,除了可以简化大家的开发,避免出错以外,还有一种好处,就是可以减转义字符的使用,使程序看起来更加简洁,更清晰。所以这里简单给大家分享一下,并举例说明。1.包含单引号的字符串假如我们想定义一个字符串my_str,其值为:I’mastudent,则可采用如下两种方式,通过转义字符“\”进行定义my_s

    2025年6月14日
    3
  • 安装scala和配置环境变量

    安装scala和配置环境变量安装scala和配置环境变量

    2022年4月23日
    46
  • mysql报错1396_mysql连接不上数据库

    mysql报错1396_mysql连接不上数据库我似乎无法重新创建一个已删除的简单用户,即使以root用户身份在MySQL中也是如此。我的情况是:用户’jack’曾经存在,但是我从mysql.user中删除了它以重新创建它。我在那张桌子上看不到任何痕迹。如果我对其他随机用户名(例如“jimmy”)执行此命令,则该命令会正常工作(就像最初对“jack”所做的一样)。我已经做了些什么来破坏用户“jack”,以及如何撤销该破坏,以便重新创建“…

    2022年8月12日
    6
  • shell 或运算_shell 变量运算

    shell 或运算_shell 变量运算shell中多重条件与或运算if[-e/dev/mmcblk0p1]&amp;&amp;[-e/dev/mmcblk0p2]&amp;&amp;[-e/dev/mmcblk0p3];then echo-e"—-&gt;partitionisexisting!" exit0fi参考:Shell脚本IF条件判断和判断条件总结…

    2022年10月9日
    4

发表回复

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

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