Java Stream API

2075 / Java / Stream API

 

SQL-команди для колекцій

Новий спосіб роботи з колекціями

Дозволяє писати коротший і зрозуміліший код

Частину коду можна запускати паралельно parallel()

 


 

Перетворити в потік

Stream<String> stream = Arrays.stream(arr);
List<Integer> x = Arrays.asList(3, 2, 5, 4, 1);

 

 

List<Integer> x = Arrays.asList(3, 2, 5, 4, 1);
Stream<Integer> s = x.stream(); // перетворити в потік
Stream<Integer> s2 = s.filter(a -> a%2 != 0).sorted();
Stream<String> s3 = s2.map(e -> e.toString() + "$");
List<String> list = s3.collect(Collectors.toList()); // перетворити в список
list.forEach(a -> System.out.println(a));

 
1$
3$
5$

 

 

max() - найбільший елемент
filter() - зробити вибірку
skip(2) - відкинути перші 2
limit(2) - обмежитися першими 2
distinct() - пробрати дублікати
count() - полічити
sorted() - сортувати

sorted(Collections.reverseOrder()) - у зворотному порядку
sorted(Comparator.comparing(Worker::getAge).reversed()) - по віку, зворотний
map(a -> a*a) - змінює кожен елемент
mapToInt() - об'єкт в примітив (одне число)
mapToInt(a-> a*a).sum() - пододавати добутки
mapToDouble()

["a", "b", "c"]
s.anyMatch(element -> element.contains("a")) // true
s.allMatch(element -> element.contains("a")) // false, [a,a,a] - true
s.noneMatch(element -> element.contains("a")) // false, [b,b,b] - true
[1,2,3].reduce(5, (a, b) -> a + b) - 5 + 1 + 2 + 3 = 11 з усього, отримати одне

 


 

max( Comparator.comparing( a -> a.getMoney() ) )
max( Comparator.comparing( Account::a.getMoney() ) )  // так читабельніше

 


 

Своє сортування
Comparator<String> reverseComparator = new Comparator<String>() {
  @Override
  public int compare(String i1, String i2) {
    if(i2.length() > i1.length()){
      return 1;
    }
    else if(i2.length() < i1.length()){
      return -1;
    }
    else {
      return 0;
    }
  }
};

Stream<String> s = list.stream().sorted(reverseComparator);