Chr*_*311 5 java refactoring java-8 java-stream
我找到了以下代码,它在某些情况下(如果它不是OLD)将一个项添加到列表中.之后,此列表将打包在一个公共控件列表中.
List<ListDataContent> list = new ArrayList<>();
for (KonditionValue kondition : konditions) {
if (kondition.getStatusKz().equals(StatusKz.OLD))
continue;
for (TermKondValue tilg : kondition.getTermimKonditions()) {
if (tilg.getStatusKz().equals(StatusKz.OLD))
continue;
TerminKondListContent listContent = new TerminKondListContent(tilg, kondition.getChangeDatum(), funds);
list.add(listContent);
}
}
SimpleListControl listCtrl = new SimpleListControl();
listCtrl.setDataModel(new ListDataModel(list));
Run Code Online (Sandbox Code Playgroud)
我尝试使用java8流进行以下重构:
List<ListDataContent> list = konditionen.stream().map(kondition -> map(tilg, kondition.getChangeDate(), funds)).sorted().collect(Collectors.toList());
SimpleListControl listCtrl = new SimpleListControl();
listCtrl.setDataModel(new ListDataModel(list));
Run Code Online (Sandbox Code Playgroud)
问题是地图方法......
private TerminKondListContent map(TermKondValue tilg, Date changeDate, BigDecimal funds) {
if (kondition.getStatusKz().equals(StatusKz.OLD))
return null;
for (TermKondValue zins : kondition.getTerminkonditions()) {
if (zins.getStatusKz().equals(StatusKz.OLD))
return null;
return new TerminKondListContent(tilg, changeDate, funds);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在继续的情况下我该怎么办?返回null?然后我可以从流中过滤掉null值
list.stream().filter( Objects::nonNull )
Run Code Online (Sandbox Code Playgroud)
在这里使用Optionals是一种选择吗?
它不是那么漂亮,但你可以有以下
List<ListDataContent> list =
konditions.stream()
.filter(kondition -> !kondition.getStatusKz().equals(StatusKz.OLD))
.flatMap(kondition ->
kondition.getTerminTilgkonditions()
.stream()
.filter(tilg -> !tilg.getStatusKz().equals(StatusKz.OLD))
.map(tilg -> new AbstractMap.SimpleEntry<>(kondition, tilg))
)
.map(e -> new TerminKondTilgListContent(e.getValue(), e.getKey().getChangeDatum(), funds))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这会创建Stream<KonditionValue>并仅保留状态不是的StatusKz.OLD。然后,它将每个人平面映射到他们的TermKondTilgValues 中,其中也只保留TermKondTilgValue不具有状态的人。StatusKz.OLD
请注意,我们保留对 和TermKondTilgValue的引用KonditionValue,因为稍后我们需要,因此我们使用 aAbstractMap.SimpleEntry作为两个值的持有者。
最后,这个Stream被映射到相应的TerminKondTilgListContent并收集到一个列表中。
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |