> 映射 java 8,java,java-8,java-stream"/>

首页 > 解决方案 > 如何转换流> 映射 java 8

问题描述

在这里,我发布示例数据结构

我有一个清单List<Result> resultsList;

class Result { 
    String name; 
    Map<String,Integer> resultMap; 
}

现在我想浏览这个列表并获取地图。

resultList.stream().filter(result->"xxx".equals(result.getName()))
                   .map(result->result.getResultMap);

它返回Stream<Map<String,Integer>>,但我只需要Map<String,Integer>.

如何使用 java 8 流获取它?

更新:

正如geneqew提到的

这就是我的数据结构的样子

List<Result> resultsList;

Map<String, Integer> map1 = new HashMap<>();
map1.put("m1", 1);
Map<String, Integer> map2 = new HashMap<>();
map2.put("m2", 2);
Map<String, Integer> map3 = new HashMap<>();
map3.put("m3", 3);

results = Arrays.asList(
        new Result("r1", map1),
        new Result("r2", map2),
        new Result("r3", map3)
);

我想检索基于name.

for (Result result: resultsList)
{
   if ('xxx'.equals(result.getName())
   {
      return result.getResultMap();
   }
} 

标签: javajava-8java-stream

解决方案


由于您想返回第一个Result元素的结果映射以通过您的过滤器,您可以通过以下方式获取它findFirst()

Optional<Map<String,Integer>> resultMap = 
    resultList.stream()
              .filter(result->"xxx".equals(result.getName()))
              .map(Result::getResultMap)
              .findFirst();

您可以Map通过Optional以下方式提取:

Map<String,Integer> resultMap = 
    resultList.stream()
              .filter(result->"xxx".equals(result.getName()))
              .map(Result::getResultMap)
              .findFirst()
              .orElse(null);

推荐阅读