Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java 8 Streams: декларативная обработка данных

Stream — новый абстрактный слой в Java 8 для декларативной обработки данных (как SQL). Вместо циклов и ручных проверок — конвейер операций. Автоматически использует многоядерные процессоры через parallelStream().

Характеристики Stream

Создание стримов

Collection.stream()        // sequential
Collection.parallelStream() // parallel

Основные операции

forEach

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

map

List<Integer> squares = numbers.stream()
    .map(i -> i*i).distinct().collect(Collectors.toList());

filter

long count = strings.stream().filter(s -> s.isEmpty()).count();

limit

random.ints().limit(10).forEach(...);

sorted

random.ints().limit(10).sorted().forEach(...);

Parallel processing

long count = strings.parallelStream().filter(s -> s.isEmpty()).count();

Легко переключаться между sequential и parallel.

Collectors

List<String> filtered = strings.stream()
    .filter(s -> !s.isEmpty()).collect(Collectors.toList());
String merged = strings.stream()
    .filter(s -> !s.isEmpty()).collect(Collectors.joining(", "));

Statistics

IntSummaryStatistics stats = numbers.stream().mapToInt(x -> x).summaryStatistics();
stats.getMax(); stats.getMin(); stats.getSum(); stats.getAverage();

Полный пример: Java 7 vs Java 8

Класс Java8Tester демонстрирует подсчёт пустых строк, строк длины 3, фильтрацию, объединение, квадраты, статистику, случайные числа — в стиле Java 7 (циклы) и Java 8 (Streams). Результаты идентичны, но код на Streams короче, читаемее и параллелизуется одной строчкой.

Результат (фрагмент)

Using Java 7: ...
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
...
Using Java 8: ...
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
...
Random Numbers (sorted): -1009474951 ... 1798939493
Empty Strings (parallel): 2

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Генерация случайных чисел в Java: Практическое руководство с Random и Math.random