当前位置: 首页 > 知识库问答 >
问题:

在Java8+中过滤map列表元素并返回map

邢浩邈
2023-03-14

我想过滤map列表的元素,然后在Java8+中返回map

public class Test {
    List<Employee> list1 = new ArrayList<>();
    list1.add(emp1);                   // emp1's  filterEmployee return true    
    list1.add(emp2);                   // emp2's  filterEmployee return true  
    list1.add(emp3);                   // emp3's  filterEmployee return false  

    List<Employee> list2 = new ArrayList<>();
    list2.add(emp4);                    // emp4's  filterEmployee return false        
    list2.add(emp5);                    // emp5's  filterEmployee return true 
    list2.add(emp6);                    // emp6's  filterEmployee return true 

    map.put("Sales", list1);
    map.put("Tech", list2);



    public Map<Department, List<Employee>> getEmployeeByDepartment( Map<Department, List<Employee>> map)
    {
        return map1;
    }   

    static boolean filterEmployee(Employee employee)
    {
        check employee something and filter out based on some critiea
        and return true or false based on that
    }
}

在getEmployeeByDepartment方法中,对于映射中的每个条目,使用下面的filterEmployee方法在映射值的列表中筛选employee,返回的map1将包含映射,以便

<“tech”,list2.add(emp6)>//emp6的filterEmployee返回true

我在下面试过这个和那个,但没有成功

Map<Department, List<Employee>> map2 = map.entrySet().stream().filter(entry -> entry.getValue().stream().filter(Test::filterEmployee).collect(Collectors.toMap((Department)entry.getKey(), (List<Employee>)entry.getValue())));

共有1个答案

聂季同
2023-03-14

类似这样的事情应该会起作用:

private static boolean shouldKeep(Employee employee) { ... }

// ...

Map<Department, List<Employee>> employees = // a map you've built

// ...

Map<Department, List<Employee>> filteredMap =
                employees.entrySet().stream().collect(
                        Collectors.toMap(
                                e -> e.getKey(),
                                e -> e.getValue().stream()
                                        .filter(employee -> shouldKeep(employee))
                                        .collect(Collectors.toList())));
 类似资料:
  • 如何使用java8流过滤列表,如果找到的元素是过滤列表中唯一的元素,则返回该元素,否则(如果有更多的元素满足条件,或者没有满足条件的结果)返回例如 我需要这样的东西: 但我想知道我是否可以在一个单一的流中做到这一点? 有单一的流解决方案吗?

  • 如何过滤<代码>地图 仅当列表中的任何员工具有字段值性别=“M”时,我才必须过滤。 输入:

  • 有一个简单的: 以及任务对象的列表。如何通过使用获得每个作为的列表。我试过这个: 但它返回

  • 问题内容: 我想从列表中筛选元素,并使用lambda遍历每个元素的元素。例如,给定列表: 假设我只想保留列表总和大于N的元素。我尝试编写: 但我得到了错误: 在将每个元素的值分配给x,y和z时如何进行迭代?像zip之类的东西,但列表很长。 谢谢, ps我知道我可以这样写:filter(lambda x:sum(x)…,a)但这不是重点,想象一下这些不是数字而是任意元素,我想将它们的值分配给变量名。

  • 这工作正常: 我得到了一个非常好的JSON数组和对象。 现在的问题是,我喜欢将我的数据作为有效载荷放入响应中,以便能够设置标头和状态,或者返回一个错误对象作为有效载荷。但是不管用。 Mai 16,2012 7:00:35 PMorg.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor写响应错误消息警告:未找到响应类ArrayList的消息正文编写器。

  • 我当前正在过滤一个流,但是如果过滤器没有返回任何匹配项,我想返回一个默认值。这是在附加流的链中,所以我使用它来避免在一个步骤没有任何结果时链停止。 目前,我正在通过将筛选结果收集到一个列表中来伪造它,如果列表为空,请创建新的默认列表并将其作为流返回。如果列表不为空,则将结果转换回流以将其传递回。 有什么更流的方式来实现这一点,而不需要去列表和返回流?