Java 8流:解析地图列表

时间:2017-02-02 14:42:59

标签: java java-8 java-stream

我正在尝试使用Stream API从地图列表中获取Long列表。

这是班级的样子:

class Report Bean{
   private MarshallableMap data;
}

对象数据包含如下记录:(" ID",1),(" Name"," TestName")。

我需要从ReportBeans列表中获取ID列表。 这就是我尝试过的:

 List<Long> ids = reportBeans.stream().flatMap(
                    m -> m.getData().entrySet().stream()
                            .filter(e -> e.getKey().equals("ID"))
                            .map(Map.Entry::getValue)
                            .map(Long.class::cast))
                            .collect(Collectors.toList());

我得到空列表。拜托,我需要建议。谢谢

2 个答案:

答案 0 :(得分:3)

有很多不必要的流媒体正在进行中。我认为这更适合您的需求:

reportBeans.stream()
  .map(r -> r.getData().get("ID"))
  .filter(Objects::nonNull)
  .map(Long.class:cast)
  .collect(toList());

答案 1 :(得分:0)

您尚未展示您的班级“MarshallableMap”的外观。我们有必要提供准确的答案。但是,如果您的“数据”字段属于Map<String, String>类型,则可以通过以下方式获取ID列表:

     List<Long> ids = reportBeans.stream()
        .flatMap(
                m -> (m.getData().entrySet().stream()
                        .filter(e -> "ID".equals(e.getKey()))
                        .map(e -> Long.valueOf(e.getValue())))
        )
        .collect(Collectors.toList());