我还是Java中的新手,我无法理解如何将其转换为单个列表或集合:
我被发送到SomeClassA对象的List中,这些对象有很多字段:
SomeClass:
String name
String someId
...
ImmutableMap<SomeCategory, ImmutableList<SomeClassB>> someMap
(不可变集合来自:com.google.common.collect)
给定SomeClassA列表,我希望结果是SomeClassB的一组。
所以SomeClassA的列表进来了,我希望能够通过它获得一些Map,然后过滤掉某些类别,得出SomeClassB列表,然后最后组合所有列表。
我尝试过几种不同的过滤器和地图组合,但总是会遇到错误的类型或额外的流。这是一个简单的方法吗?
return listOfSomeClassA.stream()
.map(objA -> objA.getSomeMap())
. // filter someMap entries by the map's keys of category - someCategory.equals("something")
. // put together all the lists of those categories == something??
答案 0 :(得分:3)
有一种内置的过滤方法可以按某种条件过滤掉流。如果它的计算结果为false,则将被删除。
return listOfSomeClassA.stream()
.flatMap(objA -> objA.getSomeMap().entrySet().stream())
.filter(entry -> "something".equals(entry.getKey()))
.flatMap(entry -> entry.getValue().stream())
.collect(Collectors.toList());