把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。你需要根据实际情况更改对应的字段名和数据类型。

相关文章
|
6天前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
2月前
|
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。
List与String相互转化方法汇总
|
1月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
29 1
|
2月前
|
TensorFlow 算法框架/工具 Python
从numpy,list对象创建
【8月更文挑战第12天】从numpy,list对象创建。
22 8
|
2月前
|
存储 程序员 API
八股day05_API、String对象和集合
day05_API、String对象和集合
|
2月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
26 5
|
3月前
|
XML Java API
List与String相互转化的方法有哪些
摘要:本文概述了Java中List转换为String及反之的多种策略。使用`String.join()`可简洁地连接List元素;`StringBuilder`提供灵活控制;Java 8 Stream API收集器简化操作;Apache Commons Lang3的`StringUtils.join()`和Guava的`Joiner.on()`支持外部库的高效转换。
|
2月前
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
|
2月前
|
Python
【Pandas】Pandas的DataFrame按行插入list数据或者读取一行并存为csv文件
本文提供了使用Pandas库对DataFrame进行操作的示例代码。
91 0
|
3月前
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
下一篇
无影云桌面