我想过滤一个"地图列表"并使用Streams创建一个新对象。
第一步,我可以从列表中选择与特定键匹配的条目:
List<Map<String,String>> listOfItems =...
listOfItems.stream().filter(m -> m.get("name").equals("apple"));
现在,我想使用选定的Map条目创建一个对象。
谢谢, 苏哈
答案 0 :(得分:0)
这是你需要的吗?
List<Map<String,String>> listOfItems =...
listOfItems.stream()
.filter(m -> m.containsValue("apple"))
.map(m -> new NewObject(m))
.collect(Collectors.toList());
答案 1 :(得分:0)
所以,如果我理解你的问题,你需要这样的东西:
List<Map<String,String>> listOfItems =...
List<MyObject> objects = listOfItems
.stream()
.filter(m -> m.get("name").equals("apple"))
.map(MyObject::new) // Construct object from matching map
.collect(Collectors.toList()); // Collect into list
这将创建一个MyObject
个实例列表,一个用于原始列表中每个匹配的地图。如果您只希望有一个这样的Map,或者您只想创建第一个匹配Map的对象,则可以用.findFirst()
替换最后一行(请参阅here)。