Примеры использования Java Stream API

R5AM, Александр Ящук, Москва, 2020.
На главную

1. Собрать Set из одного элемента:

  Set<String> tableName = Stream.of(table).collect(Collectors.toSet());
  

2. Собрать в Set из объектов FileUnloadingKit только поля longTableName:

  Set<String> tablesNames = kits.stream().map(FileUnloadingKit::getLongTableName).collect(Collectors.toSet());
  

3. Вернуть первый элемент из Set:

  if(reports.stream().findFirst().isPresent())  
    report = reports.stream().findFirst().get();
  

4. Сортировать Map по значению::

  recordsNumbers.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(System.out::println);
  

5. Заполнить нулями все значения словаря. Состояния таблиц - ключи на основе списка таблиц, значения всех флагов "0" (невыгруженная).

  Map<String, Integer> tablesStatuses =  tables.stream().collect(Collectors.toMap(t1 -> t1, t1 -> 0));
  

6. Суммарная длительность выгрузки. А "null" в значениях игнорируем:

  int unloadingTotalDuration = resultData.stream()
                                  .filter(result -> result.uploadDuration != null)
                                  .mapToInt(result -> result.uploadDuration)
                                  .sum();
  

7. Выбрать элемент по значению TOTAL поля объекта:

  DeltaResultReport totalDeltaResultReport = (DeltaResultReport) deltaStagesResults.stream()
                                                .filter(report -> report.tableName.equals("TOTAL"))
                                                .distinct()
                                                .toArray()[0];
  

8. Второй рапорт, соответствующий таблице из первого рапорта

   ResultReport report2 = (ResultReport) stage2Reports.stream()
            .filter(report -> report.tableName.equals(report1.tableName))
            .distinct()
            .toArray()[0];
  

9. Суммарная длительность:

  int consolidatedDuration = results.stream().mapToInt(r -> r.uploadDuration).sum();
  

10. Изменить значение поля объекта в коллекции по условию:

  deltaStagesResults.forEach(report -> {
                        if (report.tableName.equals(report1.getTableName())) {
                            report.setRecordsNumbers(report2.recordsNumbers - report1.recordsNumbers);
                        }
                    });
  

11. Выбрать элементы начинающиеся на содержимое namePrefix, а заканчивающиеся на содержимое namePostfix и отсортировать:

  return tables.stream()
                .filter(str -> str.startsWith(namePrefix))
                .filter(str -> str.endsWith(namePostfix))
                .collect(Collectors.toCollection(TreeSet::new));
  

12.

  /**
   * Инвертирует словарь.
   * При дублях значений во входящем словаре возьмёт первое значение.
   * @param inputMap Входящий словарь
   * @return Инвертированный словарь
   */
  private static Map invertMap(Map inputMap) {
      return inputMap.entrySet()
              .stream()
              .collect(
              Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey, (a, b) -> a));
  }
  

13. Отобрать Ключи в Set стринговый если значение не более config.fastTableRecordsQuantity():

  Set<String> fastTables = recordsNumbers.entrySet().stream()
                .filter(e -> e.getValue() <= config.fastTableRecordsQuantity())
                .map(Map.Entry::getKey)
                .collect(Collectors.toSet());
  

14. Стрим из строк файла

  Stream<String> lines = Files.lines(Paths.get("my_file.txt"));
  

15. Стрим из списка объектов директории:

  Stream<Path> list = Files.list(Paths.get("./"));
  

16. Стрим из списка объектов директории с заданной глубиной (5) обхода дерева директории:

  Stream<Path> list = Files.walk(Paths.get("./"), 5);
  



На главную
К началу страницы