简体   繁体   English

基于arrayList的java8流API过滤器映射

[英]java8 Stream API filter Map based on arrayList

Class Person {
     Map<String, String> personNature = new HashMap<String,String>();
     // Getter and Setter of Map

     public void setBehaviour(String key, String value) {
        personNature.put(key, value);
     }
}

main(String[] abc) { 

    Person p = new Person();
    Map<String, String> personAllNature = new HashMap<String, String>();
    allNatures.put("personName", "Raj");
    allNatures.put("personAggresive", "8");
    allNatures.put("personShyness", "5");
    allNatures.put("personCourage", "9");
    allNature.put("personFakness", "2");


    List<String> personVisibleAttributes= new ArrayList<String>();
    personVisibleAttributes.add("personAggresive");
    personVisibleAttributes.add("personShyness");

} 

Now i want to filter Map (personAllNature ) in such a way that when i want to set Person's Map i will get only those values from Map which is in List(personVisibleAttributes) 现在,我想以一种方式过滤Map(personAllNature),以便在我要设置Person's Map时,我只会从Map中的List(personVisibleAttributes)中获取那些值。

something like below : 如下所示:

personAllNature.entrySet().parallelStream()
        .filter(map -> personVisibleAttributes.contains(map.getKey()))
        .forEach(entry -> p.setBehaviour( entry.getKey(), entrygetValue())

Overall : 总体 :

filter a Map based on values in List where Map key is in List and then set all those map value in Person instance. 根据列表中的值过滤列表,其中地图键位于列表中,然后在Person实例中设置所有这些地图值。

因为只添加Listattributes ,所以可以直接从List进行迭代:

personVisibleAttributes.forEach(k -> p.setBehaviour(k, personAllNature.get(k));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM