Vin*_*T.V -2 java regex dictionary java-8 java-stream
我需要将那些与 Address1 匹配的员工密钥存储到一个新的List<EmpData>
,代码如下,我可以通过正常迭代来完成。
我可以使用java8模式匹配做的collect
和filter
等?
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)
我猜你的意思是来自 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)