我的问题如下: 我有一个ListA和一个ENUM。我想遍历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);
}
这不行,因为我只想调用一次保存。
答案 0 :(得分:0)
据我所知,您遇到的问题是,您有一个Enum
和其他班级,即Data
:
enum Enum {}
class Data {
public String get(Enum value) {
return value.name();
}
}
您所需要的只是使用Data.get(Enum)
中的所有可用常量调用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<>());