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

相关文章
|
29天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
39 0
|
3月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
24 0
|
11天前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
|
16天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
19天前
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
|
1月前
|
Java API
java 对象list 使用stream进行过滤
在Java中,你可以使用Stream API对对象列表进行过滤。假设你有一个`List<MyObject>`,并且你想根据某些条件过滤出特定的对象。以下是一个示例: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<MyObject> myObjects = ... // 初始化你的对象列表 List<MyObject> filter
|
1月前
|
存储 NoSQL Java
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
54 0
|
3月前
|
存储 Java API
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
27 0
|
3月前
|
Java API
利用Stream流List<实体类>转List<String>或List<String>转List<String>
利用Stream流List<实体类>转List<String>或List<String>转List<String>
40 0
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)