把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。

简介: 把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。

简介:  

  遇到这么一个业务,举例说明把List<Person>中,idCard是重复的,我需要把相同idCard取出来,放进一个新的List里面,传给前端<<String,List<对象>>>,其中kidCardv为重复的Person

利用  : 就可以实现      Map<String, List<Person>> map = totalList.stream()
               .collect(Collectors.groupingBy(Person::getIdCard));

完整测试用例:
package Lx;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class StreamLiu {
  public static void main(String[] args) {
      List<String> list12 = new ArrayList<>();
        // 假设有三个包含对象的list链表
        List<Person> list1 = new ArrayList<>();
        Person person = new Person();
        person.setIdCard("100001"); //考试id
        person.setName("张三");//姓名
        person.setAge("100分");//分数
        list1.add(person);
        // 向list1中添加一些Person对象
        List<Person> list2 = new ArrayList<>();
        // 向list2中添加一些Person对象
        Person person2 = new Person();
        person2.setIdCard("100002");
        person2.setName("李四");
        person2.setAge("85分");
        list2.add(person2);
        List<Person> list3 = new ArrayList<>();
        // 向list3中添加一些Person对象
        Person person3 = new Person();
        person3.setIdCard("100003");
        person3.setName("赵芳");
        person3.setAge("12分");
        list3.add(person3);
        List<Person> list4 = new ArrayList<>();
        // 向list3中添加一些Person对象
        Person person4 = new Person();
        person4.setIdCard("100003");
        person4.setName("赵芳");
        person4.setAge("50分");
        list4.add(person4);
        // 将这三个链表合并成一个总的链表
        List<Person> totalList = new ArrayList<>();
        totalList.addAll(list1);
        totalList.addAll(list2);
        totalList.addAll(list3);
        totalList.addAll(list4);
        Map<String, List<Person>> map = totalList.stream()
                .collect(Collectors.groupingBy(Person::getIdCard));
     // 遍历map
        for (Map.Entry<String, List<Person>> entry : map.entrySet()) {
            String key = entry.getKey();
            List<Person> value = entry.getValue();
            System.out.println("Key: " + key);
            // 遍历List
            for (Person person1 : value) {
                System.out.println("Person: " + person1.toString());
            }
        }
    }
}
class Person {
    private String idCard;
    // 其他属性和方法
    private String name;
    //性别1男2女
    private String age;
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    // 其他getter和setter方法
    public String getAge() {
    return age;
  }
  public void setAge(String age) {
    this.age = age;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
    public String toString() {
        return "Person{" +
                "idCard='" + idCard + '\'' +  "name='" + name + '\''+ "age='" + age + '\''+
                // 其他属性
                '}';
    }
}

打印:

介绍:

       这段代码使用流(Stream)实现了将totalList列表中的元素按照idCard字段进行分组,并将结果放入Map<String, List<Person>>类型的容器map中。

Map<String, List<Person>> map = totalList.stream()
                .collect(Collectors.groupingBy(Person::getIdCard));
  • 第1行代码使用totalList.stream()方法将totalList列表转换为流(Stream)对象。
  • 第2行代码使用流的collect方法结合Collectors.groupingBy收集器实现分组操作。其中groupingBy方法的参数是一个分类函数(Function),它决定了按照哪个字段进行分组。在这里,使用的是Person::getIdCard作为分类函数,表示按照idCard字段进行分组。在Java 8中,可以使用::符号来直接引用方法,这里的引用方法是getIdCard,它是Person类中的一个获取idCard字段的方法。Collectors.groupingBy方法的返回值是一个Map<String, List<Person>>类型,它表示按照idCard字段分组后的结果。

需要注意的是,示例代码中假设了Person类有一个名为idCard的字段,并且该字段的数据类型为String。你需要根据实际情况更改对应的字段名和数据类型。

相关文章
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
58 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
2月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
277 7
|
2月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
44 3
|
3月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
4月前
|
XML Java API
List与String相互转化方法汇总
本文汇总了List与String相互转化的多种方法,包括使用`String.join()`、`StringBuilder`、Java 8的Stream API、Apache Commons Lang3的`StringUtils.join()`以及Guava的`Joiner.on()`方法实现List转String;同时介绍了使用`split()`方法、正则表达式、Apache Commons Lang3的`StringUtils.split()`及Guava的`Splitter.on()`方法实现String转List。
116 1
List与String相互转化方法汇总
|
3月前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
|
3月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
99 1
|
4月前
|
TensorFlow 算法框架/工具 Python
从numpy,list对象创建
【8月更文挑战第12天】从numpy,list对象创建。
28 8
|
4月前
|
存储 程序员 API
八股day05_API、String对象和集合
day05_API、String对象和集合