Here the words that are longer than 4 are displayed in the console.
How can I change the condition to display the word with the maximum length?

// 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); } 

}

  • What is the Dataset class? Where is he from? - Sergey Gornostaev
  • I wanted to ask what Generator and why all this is all, but oh well, I suppose that this does not affect either the question or the answer. - Sergey Gornostaev

2 answers 2

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

    As for the search for the longest string in the stream - there is a built-in max function:

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

    You can also use reduce (convolution):

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