Работа с коллекциями, stream API

118
12 декабря 2020, 01:50

Тут в консоль выводятся слова длинна которых больше 4-ёх.
Как можно изменить условие,чтобы выводилась слово с максимальной длинной ?

// main

import java.util.Arrays;
public class Main {
public static void main(String... args) {
    Dataset.of(Arrays.asList("шла", "саша", "по", "шоссе"))
            .union(Arrays.asList("и", "сосала", "сушку"))
            .filter(s -> s.length() > 4)
            .map(s -> s + ", length=" + s.length())
            .forEach(System.out::println);
 }}

//Dataset

public class Dataset<T> {
private final Generator<T> generator;
private Dataset(Generator<T> generator) { 
      this.generator = generator; 
}
public void forEach(Consumer<T> consumer) {
    generator.generate(value -> consumer.accept(value));
}
public Dataset<T> union(Collection<T> collection) {
    return new Dataset<>(generatorContext -> {
        generator.generate(generatorContext);
        collection.forEach(item -> generatorContext.emit(item));
    });
}
public Dataset<T> filter(Predicate<T> predicate) {
    return new Dataset<>(generatorContext -> generator.generate(value -> {
        if (predicate.test(value)) {
            generatorContext.emit(value);
        }
    }));
}
public <R> Dataset<R> map(Function<T, R> function) {
    return new Dataset<>(generatorContext -> generator.generate(
            value -> generatorContext.emit(function.apply(value))
    ));
}    
public static <T> Dataset<T> of(Collection<T> collection) {
    return new Dataset<>(generatorContext -> 
           collection.forEach(item -> generatorContext.emit(item))
    );
}   
public static <T> Dataset<T> dataset(Generator<T> generator) {
    return new Dataset<>(generator);
}

}

Answer 1
Dataset.of(Arrays.asList("шла", "саша", "по", "шоссе"))
       .union(Arrays.asList("и", "сосала", "сушку"))
       .max(Comparator.comparingInt(String::length))
       .map(s -> s + ", length=" + s.length())
       .ifPresent(System.out::println);
Answer 2

Что касается поиска самой длинной строки в стриме - есть встроенная функция max:

String max = Stream.of("шла", "саша", "по", "шоссе", "и", "сосала", "сушку")
        .max( (a, s) -> a.length() - s.length() ).get();
System.out.println("max = " + max);

так же можно использовать reduce (свертку):

String max = Stream.of("шла", "саша", "по", "шоссе", "и", "сосала", "сушку")
                   .reduce("", (a, s) -> s.length() > a.length() ? s : a);
System.out.println("max = " + max);
READ ALSO
Проблемы с импортом из maven local

Проблемы с импортом из maven local

Я установил джарник с нужной мне библиотекой в maven local следующей командой:

87
hibernate mapping xml добавление в таблицу

hibernate mapping xml добавление в таблицу

Допустим у меня есть Два объекта : Пенал и ручка в пенале может содержаться большое количество ручек представим бд с двумя таблицами: Код:

97