我的问题如下: 我有一个列表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<>());