Java8流:解析映射列表
我正在尝试使用流API从地图列表中获取长列表 这是类的外观:Java8流:解析映射列表,java,java-8,java-stream,Java,Java 8,Java Stream,我正在尝试使用流API从地图列表中获取长列表 这是类的外观: class Report Bean{ private MarshallableMap data; } 对象数据包含如下记录:(“ID”,1),(“Name”,“TestName”) 我需要从ReportBean列表中获取ID列表。 这就是我尝试过的: List<Long> ids = reportBeans.stream().flatMap( m -> m.getDa
class Report Bean{
private MarshallableMap data;
}
对象数据包含如下记录:(“ID”,1),(“Name”,“TestName”)
我需要从ReportBean列表中获取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());
List id=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());
我得到一张空名单。求你了,我需要建议。谢谢有很多不必要的流媒体正在进行。我认为这更适合您的需要:
reportBeans.stream()
.map(r -> r.getData().get("ID"))
.filter(Objects::nonNull)
.map(Long.class:cast)
.collect(toList());
您尚未显示类“MarshallLableMap”的外观。我们有必要提供准确的答案。但是,如果“数据”字段的类型为
Map
,则可以通过以下方式获取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());
List id=reportBeans.stream()
.平面图(
m->(m.getData().entrySet().stream())
.filter(e->“ID”.equals(e.getKey()))
.map(e->Long.valueOf(e.getValue()))
)
.collect(Collectors.toList());
您确定有任何bean的密钥正好是的“ID”
?请共享MarshallLableMap
所包含的内容。ID
是如何关联的。也许是类名ReportBean
中的一个输入错误,你们为什么坚持迭代entrySet
?@MikhailProkhorov,是谁坚持的?我的答案只是在OP的代码中提供了一个修复程序,只需要很少的更改。总有一些方法可以改进一个脱离主题的程序。