如何通过枚举类型合并 Java 8 中的多个列表?
我有 2 个列表:
List<StatusSummary> listA //4 items because we have 4 enum types
List<StatusSummary> listB //4 items because we have 4 enum types
class StatusSummary {
private StatusEnum resourcesStatus; //4 statuses: TypeA, TypeB, TypeC, TypeD
private Integer count;
}
我想要一个包含 4 个项目的列表,每个 resourcesStatus: TypeA, TypeB, TypeC, TypeD
以及 count
字段中的元素总和,例如:
List<StatusSummary> listA+B with 4 objects:
(resourcesStatus: TypeA, count: 3), (resourcesStatus: TypeB, count:99), (resourcesStatus: typeC, count:322), (resourcesStatus: TypeD, count:2)
到目前为止,我实现了这样的东西:
listA
.getResourcesStatus()
.forEach(la -> listB.getResourcesStatus().stream()
.filter(lb -> lb.getResourcesStatus() == la.getResourcesStatus())
.forEach(lb -> result.add(new StatusSummary()
.count(la.getCount() + lb.getCount())
.status(la.getStatus()))));
最佳答案
您可以使用 Collectors.toMap
. map ResourcesStatus
并合并两个 StatusSummary
与 count
相同的合并函数中的字段 ResourcesStatus
然后你得到Map<StatusEnum, StatusSummary>
然后使用 .values()
获取 map 的值在ArrayList
.
List<StatusSummary> newList =
new ArrayList<>(
Stream.of(listA, listB)
.flatMap(Collection::stream)
.collect(Collectors.toMap(e -> e.getResourcesStatus(), i -> i,
(a,b) -> new StatusSummary(a.getResourcesStatus(),
a.getCount() + b.getCount())))
.values());
关于Java 8 如何按枚举类型合并多个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63505072/