Java流过滤List <map <string,string>&gt;

时间:2018-05-22 13:37:09

标签: java java-stream

我想过滤一个&#34;地图列表&#34;并使用Streams创建一个新对象。

第一步,我可以从列表中选择与特定键匹配的条目:

List<Map<String,String>> listOfItems =...
listOfItems.stream().filter(m -> m.get("name").equals("apple"));

现在,我想使用选定的Map条目创建一个对象。

谢谢, 苏哈

2 个答案:

答案 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)。