Java 8 Stream - 遍历多个列表并连接答案



我的问题如下: 我有一个列表A和一个枚举。我想遍历 ListA,并为 ListA 中的每个元素应用一个方法 get(value(,其中 value 是一个 ENUM。所有这些处理都应返回 T 类型的对象。 我现在拥有的是:

default void processLists(P<?, ?, T> p) {
T allData = (T) Stream.of(Vvalues.values())
.map(c -> p.get(c.name()))
.flatMap(optionalData -> optionalData.map(data -> ((List<T>) data).stream()).orElse(Stream.empty()))
.collect(Collectors.toList());
save(allData);
}

.... getListA((.stream((.forEach(p->processLists(p((;

代码(如评论中发布的那样(:

getUrls().stream().forEach(url->processUrl(url)); 
default void processUrl(Url<?, ?, T> url) {
T allData = (T) Stream.of(Location.values()) 
.map(location -> url.get(location.name())) 
.flatMap(optionalData -> optionalData
.map(data -> ((List<T>) data).stream())
.orElse(Stream.empty()))
.collect(Collectors.toList()); 
save(allData); 
}

这是不行的,因为我想只调用保存一次。

据我正确理解,您有Enum和其他一些类,即Data

enum Enum {}
class Data {
public String get(Enum value) {
return value.name();
}
}

您所需要的只是使用Enum中的所有可用常量调用Data.get(Enum)。作为源列表中的每个项目的结果,您将获得结果列表,并且希望将所有这些数据作为简单列表检索。

public static List<String> process(List<Data> data) {
return data.stream()
.map(d -> Arrays.stream(Enum.values()).map(d::get).collect(Collectors.toList()))
//    .map(d -> Arrays.stream(Enum.values()).map(e -> d.get(e.name())).collect(Collectors.toList()))
.flatMap(List::stream)
.collect(Collectors.toList());
}

以下是客户端代码的示例:

List<String> res = process(new ArrayList<>());

最新更新