来自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]
它可以工作,但有点复杂,不是吗?
我的问题是:提出更简洁/可读的代码
最佳答案
您可以省略大部分与 Stream 相关的操作,直接使用 Collection 的 addAll 方法将所有元素添加到 Set 中:
Set<String> result = new HashSet<>(); // or another kind of Set
statuses.forEach(r -> result.addAll(r.outOfDateProperty().get()));
它没有太多使用 Stream API,但是它更短且更易于阅读。
关于java - 使用 java.util.stream 将列选择到记录列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23890832/