美文网首页
Java集合操作

Java集合操作

作者: 程序员小白成长记 | 来源:发表于2021-10-11 03:01 被阅读0次

List转为Map

resDocumentMap = documentLists.get(i).stream().collect(Collectors.toMap(e -> String.valueOf(e.get("_id")), e -> e));

List转为Set

Set<String> tmpDocumentSet = documentLists.get(i).stream().map(e -> String.valueOf(e.get("_id"))).collect(Collectors.toSet());

retainAll 保留公共的元素

public static void main(String[] args) {
    Set<String> set1 = new HashSet<>();
    Set<String> set2 = new HashSet<>();
    set1.add("1");
    set1.add("2");

    set2.add("1");
    set2.add("3");
    set1.retainAll(set2);
    // [1]
    System.out.println(set1);
}

map.keySet()

public static void main(String[] args) {
    Map<String, Student> map = new HashMap<>();
    map.put("1", new Student());
    map.put("2", new Student());
    map.put("3", new Student());

    Set<String> tmpSet = new HashSet<>();
    tmpSet.add("1");

    // Returns a Set view of the keys contained in this map. The set is backed by the map
    // so changes to the map are reflected in the set, and vice-versa
    // keySet()方法会返回map的set视图,更改map会影响set,反之亦然
    Set<String> res = map.keySet();
    res.retainAll(tmpSet);
    // [1]
    System.out.println(map.keySet());
}

guava MapDifference

不太符合预期,谨慎使用

import cn.hutool.json.JSONUtil;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;

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

public class Student {

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    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 static void main(String[] args) {
        List<Student> students1 = new ArrayList<>();
        List<Student> students2 = new ArrayList<>();

        Student student11 = new Student();
        Student student12 = new Student();
        student11.setId("1");
        student11.setName("zhangsan");
        student11.setAge(18);

        student12.setId("2");
        student12.setName("lisi");
        student12.setAge(20);
        students1.add(student11);
        students1.add(student12);

        Student student21 = new Student();
        Student student22 = new Student();
        student21.setId("1");
        student21.setName("zhangsan");
        student21.setAge(18);

        /*student22.setId("3");
        student22.setName("wangwu");
        student22.setAge(21);
        students2.add(student21);
        students2.add(student22);*/
        student22.setId("2");
        student22.setName("lisi");
        student22.setAge(20);
        students2.add(student21);
        students2.add(student22);


        Map<String ,Student> studentMap1 = students1.stream().collect(Collectors.toMap(e-> e.getId(), e -> e));

        System.out.println("====> studentMap1");
        // {"1":{"name":"zhangsan","id":"1","age":18},"2":{"name":"lisi","id":"2","age":20}}
        System.out.println(JSONUtil.toJsonStr(studentMap1));;
        Map<String ,Student> studentMap2 = students2.stream().collect(Collectors.toMap(e-> e.getId(), e -> e));

        System.out.println("====> studentMap2");
        System.out.println(JSONUtil.toJsonStr(studentMap2));
        // // {"1":{"name":"zhangsan","id":"1","age":18},"3":{"name":"wangwu","id":"3","age":21}}
        MapDifference mapDifference = Maps.difference(studentMap1, studentMap2);

        System.out.println("====> studentMap1, studentMap2 are equal: ");
        // false
        System.out.println(mapDifference.areEqual());

        Map<String, Student> entriesInCommon = mapDifference.entriesInCommon();
        System.out.println("====> entriesInCommon 集合交集");
        // 返回{}, 对象内容相同,但是是两个不同的对象也会认为是不同的对象
        System.out.println(JSONUtil.toJsonStr(entriesInCommon));

        Map<String, Student> entriesDiffering = mapDifference.entriesDiffering();
        System.out.println("====> entriesDiffering 键相同,值不同");
        // {"1":{}}
        System.out.println(JSONUtil.toJsonStr(entriesDiffering));

        Map<String, Student> entriesOnlyOnLeft = mapDifference.entriesOnlyOnLeft();
        System.out.println("====> entriesOnlyOnLeft");
        // {"2":{"name":"lisi","id":"2","age":20}}
        System.out.println(JSONUtil.toJsonStr(entriesOnlyOnLeft));

        Map<String, Student> entriesOnlyOnRight = mapDifference.entriesOnlyOnRight();
        System.out.println("====> entriesOnlyOnRight");
        // {"3":{"name":"wangwu","id":"3","age":21}}
        System.out.println(JSONUtil.toJsonStr(entriesOnlyOnRight));
    }
}

参考

【1】List转Map的三种方法:https://blog.csdn.net/linsongbin1/article/details/79801952
【2】Java Map 求交集 并集 差集
【3】Guava - Maps.difference:https://blog.csdn.net/Dream_Weave/article/details/109390841

相关文章

  • Java基础-集合框架

    概念 Java集合框架提供了数据持有对象的方式,提供了对数据集合的操作,Java集合框架位于java.util包下...

  • 集合框架

    java集合框架提供了数据持有对象的方式,提供了对数据集合的操作。java集合框架位于java.util包下,主要...

  • 7.30集合学习总结

    JAVA集合框架 JAVA集合可以存储和操作数目不固定的一组数据;JAVA集合只能存放引用类型的数据,不能存放基本...

  • java集合操作时发生的异常java.lang.Unsuppor

    java集合操作时发生的异常java.lang.UnsupportedOperationException 这是由...

  • Java集合操作

    List转为Map List转为Set retainAll 保留公共的元素 map.keySet() guava ...

  • 芯灵思SinlinxA33开发板安卓开发-java语言基础(9)

    java中的集合类: Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本...

  • 【Java 8实战笔记】引入流

    引入流 集合是Java中使用最多的API。几乎每个Java应用程序都会制造和处理集合。但集合的操作却远远算不上完美...

  • JAVA基础-JAVA8 对集合的增强

    Java8流、流操作集合 Predicate 谓词对象 Java8起为Collection集合新增了一个remov...

  • 集合框架

    集合框架的概念 集合:存放数据的容器 集合框架:java中,用于表示集合,以及操作集合的类和接口的统称 数组与集合...

  • 0730课程总结

    Java集合框架 Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述...

网友评论

      本文标题:Java集合操作

      本文链接:https://www.haomeiwen.com/subject/xwokoltx.html