使用 Java 8 模式匹配将 Map 转换为 List

Vin*_*T.V -2 java regex dictionary java-8 java-stream

我需要将那些与 Address1 匹配的员工密钥存储到一个新的List<EmpData>,代码如下,我可以通过正常迭代来完成。

我可以使用java8模式匹配做的collectfilter等?

public static void main(String[] args) {
    List<EmpData> lst1 = new ArrayList<EmpData>();
    List<EmpData> lst2 = new ArrayList<EmpData>();
    EmpData obj1=new EmpData("100", "Name1", "25/05/1979");
    EmpData obj2=new EmpData("101", "Name2", "25/05/1975");
    EmpData obj3=new EmpData("103", "Name3", "25/05/1976");
    lst1.add(obj1);
    lst1.add(obj2);
    lst2.add(obj3);

    HashMap<String, List<EmpData>> map = new HashMap<>();

    map.put("Address1Emp1", lst1);
    map.put("Address2Emp2", lst2);

    List<EmpData> listEmp = new ArrayList<>();
    //Need to store those employees key matching Address1 to a List<EmpData>

}
Run Code Online (Sandbox Code Playgroud)

And*_*cus 5

我猜你的意思是来自 java-8 的流和要求,即键必须匹配"Address1Emp.*"正则表达式。

您可以使用以下代码:

map.entrySet().stream() // create a stream of entries
    .filter(e -> e.getKey().matches("Address1Emp.*")) // leave only those entries, whose keys start with "Address1"
    .map(Map.Entry::getValue) // get values only
    .collect(Collectors.toList()); 
Run Code Online (Sandbox Code Playgroud)

添加内部列表后进行编辑:

map.entrySet().stream() // create a stream of entries
    .filter(e -> e.getKey().matches("Address1Emp.*")) // leave only those entries, whose keys start with "Address1"
    .flatMap(e -> e.getValue().stream()) // get values only
    .collect(Collectors.toList()); 
Run Code Online (Sandbox Code Playgroud)