Java中使用流将两个集合根据某个字段进行过滤去重?

这篇具有很好参考价值的文章主要介绍了Java中使用流将两个集合根据某个字段进行过滤去重?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要是需要GPT Plus账号的小伙伴可以联系我~

Java中使用流将两个集合根据某个字段进行过滤去重?

在Java中,您可以使用流(Stream)来过滤和去重两个集合。下面是一个示例代码,展示如何根据对象的某个字段进行过滤和去重操作:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // 创建一个对象集合
        List<Person> persons = new ArrayList<>();
        persons.add(new Person("Alice", 25));
        persons.add(new Person("Bob", 30));
        persons.add(new Person("Alice", 25));
        persons.add(new Person("Charlie", 35));
        persons.add(new Person("Alice", 40));
        persons.add(new Person("Bob", 25));

        // 根据 name 字段进行过滤和去重
        List<Person> filteredAndDistinctPersons = persons.stream()
                .filter(person -> person.getName().equals("Alice"))
                .distinct()
                .collect(Collectors.toList());

        // 打印结果
        filteredAndDistinctPersons.forEach(System.out::println);
    }
}

class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        returnPerson [name=" + name + ", age=" + age + "]";
    }
}

在这个示例中,我们创建了一个 Person 类表示人员信息,包含 name 和 age 两个字段。我们使用流的 filter 方法来过滤出 name 字段为 “Alice” 的对象,然后使用 distinct 方法来去除重复的对象。最后,我们使用 collect 方法将结果收集到一个新的集合中。

运行示例代码会输出以下结果:

Person [name=Alice, age=25]
Person [name=Alice, age=40]

这两个结果是根据 name 字段为 “Alice” 进行过滤和去重后的结果。

现在有两个集合list。如何将一个list根据另外一个list中的某个属性字段去重产生不包含的结果?

要根据一个集合中的某个属性字段,将另一个集合中不包含该属性字段的元素去重,您可以使用 Java 8+ 中的流(Stream)和过滤操作。下面是一个示例代码,展示如何实现:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // 创建两个对象集合
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("Alice", 25));
        list1.add(new Person("Bob", 30));
        list1.add(new Person("Charlie", 35));

        List<Person> list2 = new ArrayList<>();
        list2.add(new Person("Alice", 25));
        list2.add(new Person("David", 40));
        list2.add(new Person("Eve", 45));

        // 根据 list2 中的 name 字段,将 list1 中不包含该字段的元素去重
        List<Person> distinctPersons = list1.stream()
                .filter(person -> list2.stream().noneMatch(p -> p.getName().equals(person.getName())))
                .distinct()
                .collect(Collectors.toList());

        // 打印结果
        distinctPersons.forEach(System.out::println);
    }
}

class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        returnPerson [name=" + name + ", age=" + age + "]";
    }
}

在这个示例中,我们创建了两个集合 list1 和 list2,分别表示两个对象集合。我们使用流的 filter 方法来过滤出 list1 中不包含 list2 中 name 字段的元素,然后使用 distinct 方法去重。最后,我们使用 collect 方法将结果收集到一个新的集合中。

运行示例代码会输出以下结果:

Person [name=Bob, age=30]
Person [name=Charlie, age=35]

这两个结果是根据 list2 中的 name 字段,将 list1 中不包含该字段的元素进行了去重。

如果您觉得我所提供的信息对您有帮助,欢迎您点赞、收藏和评论。如果您想要更深入的交流,您可以添加我的微信号,或者关注我的微信公众号。您的支持和鼓励是我持续写作的动力,我期待与您互动并提供更多有价值的信息。文章来源地址https://www.toymoban.com/news/detail-653991.html

到了这里,关于Java中使用流将两个集合根据某个字段进行过滤去重?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java通过Lambda表达式根据指定字段去除重复数据(集合去重)

    这里博主给大家封装好了一个工具类,里面有两个方法。 方法一:可以根据指定字段去除重复数据。 方法二:可以获取到重复的数据。 大家在使用过程中直接拷贝下方代码在要去重的类中调用即可。 导入这个工具类后怎么使用呢?我们接着往下看。 List rstList = list.stream()

    2024年02月16日
    浏览(54)
  • java用stream根据实体的某个属性对列表进行排序

    用stream流根据实体的某个属性对列表进行排序 假设有一个实体类 Person,包含两个属性 name 和 age,你可以使用 stream 流的 sorted() 方法来按照某两个字段进行排序。以下是一个示例代码: 在上述代码中,我们将 personList 转换成流后,调用了 sorted() 方法,并且使用 Comparator 的

    2024年02月06日
    浏览(55)
  • MySql Update修改(替换)某个字段中包含的某个值,根据条件修改替换某个字段的一部分值

    背景: 由于数据迁移和域名变更,Mysql中存储的文件下载地址变更; 要替换某一个字段中的部分内容,可以用update 语句和REPLACE方法,结构如下: UPDATE 表名 SET 字段名= REPLACE( 需要替换值的字段名, \\\'替换前\\\', \\\'替换后\\\' ) WHERE 字段名 REGEXP \\\"替换前的字段值\\\"; MySql U

    2024年02月05日
    浏览(41)
  • mysql 获取json数组中某个字段根据下标

    在MySQL中,JSON数据类型可以方便地存储、操作和查询包含复杂结构的数据。当我们需要从JSON数组中获取某个字段时,可以使用MySQL的JSON函数来实现。 1. JSON数据类型简介 JSON(JavaScript Object Notation)是一种常用的轻量级数据交换格式,它以键值对的方式组织数据。MySQL从5.7版本

    2024年02月11日
    浏览(51)
  • SQL结果-根据某个字段取最新时间去重

    现在有个sql,如果“propertyId”相同,取“updateTime”时间最新的那条记录,其他过滤掉。 结果SQL 为了通过 propertyId 去重并获取每个 propertyId 对应的最新时间的记录,可以使用窗口函数 ROW_NUMBER() 来对每个分组进行排序,并在外部查询中取出 rn 列等于 1 的行,即每个分组中的第

    2024年02月07日
    浏览(59)
  • Java中List对象集合按照对象中某字段进行排序

    在Java中,可以使用List集合对象的sort(Comparator? super E c)方法,按照对象中某字段对List集合进行排序 栗子: 打印输出结果如下:

    2024年02月12日
    浏览(55)
  • <MyBatis>查询sq,根据某个字段,入参传list循环判断

    实现类: Mapper类: Mybatis层: 重点关注: 根据:北京,西安,上海,过滤数据:

    2024年02月11日
    浏览(68)
  • Terraform 系列-批量创建资源时如何根据某个字段判断是否创建

    Terraform 系列文章 Grafana 系列文章 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terraform Provider 创建 Datasource. 这几天碰到这么一个现实需求: 使用 Terraform 批量创建日志数据源时, 有的数据源类型是 ElasticSearch, 有些是 Opensearch. 那么, 如何根据某个字段(如: es_t

    2024年02月13日
    浏览(81)
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(66)
  • JAVA中对list使用stream对某个字段求和

    对于List对象 或者ListMapString,integer等类型的数组,如何快速的求出list数组中某个对象的某个属性的和,平均数,统计数,最大值,最小值,等: 使用 XXXSummaryStatistics统计类实现: 运行结果如下: 相应的还有DoubleSummaryStatistics, LongSummaryStatistics

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包