java 如何从对象列表中过滤列表对象的Map

xzlaal3s  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(151)

我想Map对象与匹配和不匹配的项目的对象列表。在下面列出2个对象具有相同的名称和一个对象的加入日期等于其他对象的终止日期和剩余项目是自己。使用Java 8流,我想Map2个不同的列表。
在下面的列表中,2个对象的名称相同,并且1个对象的加入日期等于另一个对象的终止日期。
使用流后,我想与列表Map的结果,一个列表对象包含2个匹配的项目和其他列表只包含一个项目。

`public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Emp a= new Emp();
        a.setId("1");
        a.setName("hi");
        a.setJoinDate("20220201");

        Emp b= new Emp();
        b.setId("2");
        b.setName("hi");
        b.setTerminationDate("20220201");

        Emp c= new Emp();
        c.setId("3");
        c.setName("hello");
        c.setJoinDate("20220201");
        List<Emp> empList = Arrays.asList(a,b,c);

    

    }`
sz81bmfz

sz81bmfz1#

在评论中,你写道:

My goal is to get Map object out of list of objects with matched and unmatched items.

下面的代码演示如何执行此操作:

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

public class GroupingBy {

    record Employee(String id, String name) {}

    public static void main(String[] args) {
        List<Employee> list = List.of(new Employee("1", "Dumisani"), new Employee("2", "Thandiwe"), new Employee("3", "Thandiwe"));

        Map<String, List<Employee>> result = 
            list.stream()
                .collect(Collectors.groupingBy(Employee::name));
        
        System.out.println(result);
    }
}

请注意,我使用record而不是class来使演示更加简洁,而且,我将“Emp”重命名为“Employee”--没有理由省略描述性名称。
结果是按Employee.name分组。您可以看到,每个条目的值都是姓名与以下键匹配的雇员的列表:

{Dumisani=[Employee[id=1, name=Dumisani]], 
 Thandiwe=[Employee[id=2, name=Thandiwe], Employee[id=3, name=Thandiwe]]}

相关问题