来自List<record>
public final class Record {
... // Several fields
private final SimpleSetProperty<String> _outOfDate;
Record( ..., SortedSet< String > outOfDate, ... ) {
...
_outOfDate =
new SimpleSetProperty<>( FXCollections.observableSet( outOfDate ));
...
}
public SimpleSetProperty<String> outOfDateProperty() {
return _outOfDate;
}
... // Other accessors
}
我尝试仅提取OutOfDate
列(一组字符串),并使用以下代码将所有值合并到一个字符串集中。
List< Record > statuses = worker.getData()._status;
final Set<String> result =
statuses
.stream()
.flatMap(
r -> r.outOfDateProperty().get().stream())
.collect( Collectors.toSet());
System.err.println( result );
输出:
class java.util.HashSet:[HF_SYNTHETIZER_1,POWER_METER, SERIAL_SERVER,BENCH_ETH_SW,CW_SENSOR,LF_GENERATOR, SPECTRUM_ANALYZER,PC_SUPERVISION]
它有效,但它有点复杂,不是吗?
我的问题是:提出更简洁/可读的代码
答案 0 :(得分:2)
您可以省略大多数与Stream相关的操作,只需使用Collection的addAll方法直接将所有元素添加到Set中:
Set<String> result = new HashSet<>(); // or another kind of Set
statuses.forEach(r -> result.addAll(r.outOfDateProperty().get()));
它没有充分利用Stream API,但它更短更容易阅读。