我正在尝试使用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());
我得到空列表。拜托,我需要建议。谢谢
答案 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());