Java之Set 交集,差集,并集的用法

 更新时间:2023年05月04日 08:46:05   作者:夏威夷8080  
这篇文章主要介绍了Java之Set 交集,差集,并集的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java之Set 交集,差集,并集

/**
 * Created by yuhui on 2017/7/11 0011.
 */
import java.util.HashSet;
import java.util.Set;
public class TestSet {
    public static void main(String[] args) {
        Set<String> result = new HashSet<String>();
        Set<String> set1 = new HashSet<String>() {
            {
                add("王者荣耀");
                add("英雄联盟");
                add("穿越火线");
                add("地下城与勇士");
            }   
        };
        Set<String> set2 = new HashSet<String>() {
            {
                add("王者荣耀");
                add("地下城与勇士");
                add("魔兽世界");
            }
        };
        result.clear();
        result.addAll(set1);
        result.retainAll(set2);
        System.out.println("交集:" + result);
        result.clear();
        result.addAll(set1);
        result.removeAll(set2);
        System.out.println("差集:" + result);
        result.clear();
        result.addAll(set1);
        result.addAll(set2);
        System.out.println("并集:" + result);
    }
}

结果如下:

交集:[王者荣耀, 地下城与勇士] 
差集:[英雄联盟, 穿越火线] 
并集:[王者荣耀, 英雄联盟, 魔兽世界, 地下城与勇士, 穿越火线]

java8 list<bean>交集差集并集

定义bean

public class Student {
    private String Id ;
    private String name;
    private String age;
    public void setAge(String age) {
        this.age = age;
    }
    public String getAge() {
        return age;
    }
    public String getId() {
        return Id;
    }
    public String getName() {
        return name;
    }
    public void setId(String id) {
        Id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
}

定义两个list

list 1

List<Student> list1 = new ArrayList<Student>();
Student st1 = new Student();
st1.setId("2");
st1.setName("");
st1.setAge("");
list1.add(st1);
Student sta = new Student();
sta.setId("1");
sta.setName("");
sta.setAge("");
list1.add(sta);

list 2

List<Student> list2 = new ArrayList<Student>();
Student st2 = new Student();
st2.setId("2");
st2.setName("");
st1.setAge("");
list2.add(st2);
找出id存在list1不存在list2的数据——差集 (list1 - list2)
// 差集 (list1 - list2)
List<Student> distinctByUniqueList = list1.stream() 
                                     .filter(item -> !list2.stream()
                                            .map(e -> e.getId() )
                                            .collect(Collectors.toList())
                                     .contains(item.getId()))
                                     .collect(Collectors.toList());

结果:
System.out.println("---差集 reduce1 (list1 - list2)---");
for(Student st : distinctByUniqueList){
    System.out.println(st.getId());
    System.out.println(st.getName());
}

---差集 reduce1 (list1 - list2)---
1

找出id存在list1同时存在list2的数据——交集

List<Student> intersection = list1.stream()
                            .filter(item -> list2.stream()
                                    .map(e -> e.getId())
                                  .collect(Collectors.toList())
                                  .contains(item.getId()))
                            .collect(Collectors.toList());

结果:
System.out.println("---交集 intersection---");
for(Student st : intersection){
    System.out.println(st.getId());
    System.out.println(st.getName());
}

---交集 intersection---
2

获取distinctByUniqueList 与intersection并集

List<Student> add1 = istinctByUniqueList.parallelStream().collect(toList());
List<Student> add2 = intersection.parallelStream().collect(toList());
add1.addAll(add2);

结果:

结果:
System.out.println("---并集 listAll---");
 for(Student st : add1){
     System.out.println(st.getId());
     System.out.println(st.getName());
 }
 
 ---并集 listAll---
2

1

源码

import java.util.ArrayList;
import java.util.List;
import java.util.stream.*;
import static java.util.stream.Collectors.toList;
public class test {
    public static void main(String[] args) {
        List<Student> list1 = new ArrayList<Student>();
        Student st1 = new Student();
        st1.setId("2");
        st1.setName("");
        st1.setAge("");
        list1.add(st1);
        Student sta = new Student();
        sta.setId("1");
        sta.setName("");
        sta.setAge("");
        list1.add(sta);
        List<Student> list2 = new ArrayList<Student>();
        Student st2 = new Student();
        st2.setId("3");
        st2.setName("");
        st1.setAge("");
        list2.add(st2);
        // 差集 (list1 - list2)
        List<Student> distinctByUniqueList = list1.stream()
                                            .filter(item -> !list2.stream()
                                                   .map(e -> e.getId() )
                                                   .collect(Collectors.toList())
                                            .contains(item.getId()))
                                            .collect(Collectors.toList());
        System.out.println("---差集 reduce1 (list1 - list2)---");
        for(Student st : distinctByUniqueList){
            System.out.println(st.getId());
            System.out.println(st.getName());
        }
        // 交集
        List<Student> intersection = list1.stream()
                                     .filter(item -> list2.stream()
                                             .map(e -> e.getId())
                                             .collect(Collectors.toList())
                                             .contains(item.getId()))
                                     .collect(Collectors.toList());
        System.out.println("---交集 intersection---");
        for(Student st : intersection){
            System.out.println(st.getId());
            System.out.println(st.getName());
        }
        List<Student> add1 = distinctByUniqueList.parallelStream().collect(toList());
        List<Student> add2 = intersection.parallelStream().collect(toList());
        add1.addAll(add2);
        System.out.println("---并集 listAll---");
        for(Student st : add1){
            System.out.println(st.getId());
            System.out.println(st.getName());
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 学习笔记(入门篇)_java的基础语法

    java 学习笔记(入门篇)_java的基础语法

    从基础语法开始,这个语法你也可以理解为英语或是汉语里面的语法,只不过大家各有各的特点和区别;那么在学习的过程中我们就要不断的积累重要的类和方法,这样写程序就会方便快捷了,下面就开始学习java的基础语法
    2013-01-01
  • 完整的logback配置示例ELK整合包含生成json日志

    完整的logback配置示例ELK整合包含生成json日志

    这篇文章主要为大家介绍了完整的logback配置示例ELK整合包含生成json日志,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • SpringBoot整合Ureport2报表及常见使用方法

    SpringBoot整合Ureport2报表及常见使用方法

    这篇文章主要介绍了SpringBoot整合Ureport2报表及常见使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java 实战项目锤炼之IT设备固定资产管理系统的实现流程

    Java 实战项目锤炼之IT设备固定资产管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java+SSM+jsp+mysql+maven实现一个IT设备固定资产管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • SpringCloud之@FeignClient()注解的使用方式

    SpringCloud之@FeignClient()注解的使用方式

    这篇文章主要介绍了SpringCloud之@FeignClient()注解的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • servlet之session工作原理简介_动力节点Java学院整理

    servlet之session工作原理简介_动力节点Java学院整理

    这篇文章主要介绍了servlet之session工作原理简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 一篇文章带你学会Spring MVC表单标签

    一篇文章带你学会Spring MVC表单标签

    Spring MVC表单标签是网页的可配置和可重复使用的构建块,下面这篇文章主要给大家介绍了如何通过一篇文章学会Spring MVC表单标签的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • 一篇文章带你了解JAVA面对对象应用

    一篇文章带你了解JAVA面对对象应用

    Java是一门面向对象的语言。对象是Java程序中的基本实体。除了对象之外Java程序同样处理基本数据。下面这篇文章主要给大家总结了关于Java中面向对象的知识点,需要的朋友可以参考借鉴,下面来一起看看吧
    2021-08-08
  • 配置hadoop环境mapreduce连接不上hdfs解决

    配置hadoop环境mapreduce连接不上hdfs解决

    这篇文章主要为大家介绍了配置hadoop环境mapreduce连接不上hdfs解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 浅谈关于Mybatis的mapper-locations配置问题

    浅谈关于Mybatis的mapper-locations配置问题

    MyBatis 是一款优秀的半自动的ORM持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,需要的朋友可以参考下
    2023-05-05

最新评论