Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8模式匹配将映射转换为列表_Java_Regex_Dictionary_Java 8_Java Stream - Fatal编程技术网

使用Java8模式匹配将映射转换为列表

使用Java8模式匹配将映射转换为列表,java,regex,dictionary,java-8,java-stream,Java,Regex,Dictionary,Java 8,Java Stream,我需要将这些员工的密钥存储到一个新的列表,下面给出了代码,我可以通过正常的迭代来完成 我可以使用java8模式匹配,使用collect和filter等进行匹配吗 public static void main(String[] args) { List<EmpData> lst1 = new ArrayList<EmpData>(); List<EmpData> lst2 = new ArrayList<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>

}
publicstaticvoidmain(字符串[]args){
List lst1=new ArrayList();
List lst2=新的ArrayList();
EmpData obj1=新的EmpData(“100”、“名称1”、“25/05/1979”);
EmpData obj2=新的EmpData(“101”、“名称2”、“25/05/1975”);
EmpData obj3=新的EmpData(“103”、“名称3”、“25/05/1976”);
lst1.添加(obj1);
lst1.添加(obj2);
lst2.添加(obj3);
HashMap=newHashMap();
地图放置(“地址1MP1”,lst1);
地图放置(“地址2EMP2”,lst2);
List listEmp=new ArrayList();
//需要将与Address1匹配的员工密钥存储到列表中
}

我猜您指的是来自java-8的流和要求,即密钥必须匹配
“Address1Emp.*”
regex

您可以使用以下代码:

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()); 
添加内部列表后进行编辑:

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()); 

根据您需要的模式,您可以使用
startsWith

List<EmpData> listEmp = map.entrySet().stream()
    .filter(e -> e.getKey().startsWith("Address1"))
    .map(Entry::getValue)
    .collect(Collectors.toList());

java8没有名为模式匹配的功能,可能您是指java.util.stream?您的代码中存在类型检查问题,映射的值类型是
List
,但您放入映射的是
EmpData
。是@jizhilong,使用stream.@Vinod.T.V请提供一个编译器示例代码不会为行
map.put编译(“地址1MP1”,新EmpData(“100”、“名称1”、“25/05/1979”)
如果它的类型是
Map Map
这个正则表达式并不适用于所有情况。你应该检查
Address1Emp.*
因为你也包括
Address11EmpX
@jdickel这样的条目,虽然我不是100%确定OP想要的,但你很可能是对的。非常感谢!这将给出我需要合并所有Map的列表通过改变sugestion@Andronicus@Vinod.T.V,可以将值转换为单个列表吗?这如何生成嵌套的
列表
?您将
EmpData
作为一个值。如果您是说,映射将
列表
作为值类型,那么您的示例是不一致的(不提编译器)@vinod这足以让你回答你原来的问题。如果你不能解决问题,你应该试着自己将你的列表展平,并问一个单独的问题。这有助于保持问题的重点,并对其他人更有用。请参阅感谢@htmoia最后我需要将所有地图值合并到一个列表中,我在这里面临挑战。
List<EmpData> listEmp = map.entrySet().stream()
    .filter(e -> e.getKey().contains("Address1"))
    .map(Entry::getValue)
    .collect(Collectors.toList());