java - 使用 java.util.stream 将列选择到记录列表中

标签 java java-8 java-stream

来自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/

相关文章:

java - JCE 是 Java SE 6 的一部分吗?

java - Reduce 为并行流返回不可预测的结果

java - 为什么 Comparator.comparing 不适用于 String::toLowerCase 方法引用?

java - 如何使用 java 流比较两个 ArrayList 并使用过滤器获取 list1

java - Java中Streams的正确使用

Java 服务器在 32 位工作,但在 64 位工作。为什么?

java - 在 Java 中获取 Lambda 的结果

java - mapToDouble() 是否真的需要将 List<Double> 与 Java 8 流相加?

java - Android如何打包构建?

java - 如何在树莓派上运行javafx