выбор столбцов в список записей с помощью java.util.stream

1

Из 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
    Я не думаю, что вы можете сделать намного лучше.
Теги:
java-8
java-stream

1 ответ

2
Лучший ответ

Вы можете исключить большинство операций, связанных с потоком, и просто добавить все элементы в набор напрямую, используя метод addAll Collection:

Set<String> result = new HashSet<>(); // or another kind of Set
statuses.forEach(r -> result.addAll(r.outOfDateProperty().get()));

Он не очень хорошо использует Stream API, но он намного короче и легче читается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню