|
import java.util.Arrays; |
|
import java.util.List; |
|
import java.util.Optional; |
|
import java.util.stream.Collectors; |
|
import java.util.stream.Stream; |
|
|
|
public class Main { |
|
public static void main(String[] args) { |
|
List<String> pocosStrings = Arrays.asList("0", null, "2", null, null, "5"); |
|
List<String> muchosStrings = Stream.generate(() -> pocosStrings) |
|
.flatMap(List::stream) |
|
.limit(1000000) |
|
.collect(Collectors.toList()); |
|
|
|
streamConLogs(pocosStrings); |
|
stream(muchosStrings); |
|
reduceConLogs(pocosStrings); |
|
reduce(muchosStrings); |
|
} |
|
|
|
private static void streamConLogs(List<String> strings) { |
|
System.out.println("============= STREAM ============="); |
|
String errores = strings.stream() |
|
.map(Optional::ofNullable) |
|
.filter(it -> { |
|
System.out.println("Voy a filtrar: " + it); |
|
return it.isPresent(); |
|
}) |
|
.map(it -> { |
|
System.out.println("Voy a concatenar: " + it.get()); |
|
return it.get(); |
|
}) |
|
.collect(Collectors.joining()); |
|
|
|
System.out.println("Resultado: " + errores); |
|
} |
|
|
|
private static String stream(List<String> strings) { |
|
System.out.println("============= STREAM ============="); |
|
long startTime = System.currentTimeMillis(); |
|
|
|
String errores = strings.stream() |
|
.map(Optional::ofNullable) |
|
.filter(Optional::isPresent) |
|
.map(Optional::get) |
|
.collect(Collectors.joining()); |
|
|
|
long endTime = System.currentTimeMillis(); |
|
System.out.println("That took " + (endTime - startTime) + " milliseconds"); |
|
|
|
return errores; |
|
} |
|
|
|
private static void reduceConLogs(List<String> strings) { |
|
System.out.println("============= REDUCE ============="); |
|
String errores = strings.stream() |
|
.reduce("", (errorsAccumulator, currentValidacion) -> { |
|
Optional<String> error = Optional.ofNullable(currentValidacion); |
|
System.out.println("Voy a filtrar: " + error); |
|
if (error.isPresent()) { |
|
System.out.println("Voy a concatenar: " + error.get()); |
|
errorsAccumulator += error.get(); |
|
} |
|
return errorsAccumulator; |
|
}, (s1, s2) -> { |
|
System.out.println("Voy a concatenar: " + s2); |
|
return s1.concat(s2); |
|
}); |
|
|
|
System.out.println("Resultado: " + errores); |
|
} |
|
|
|
private static String reduce(List<String> strings) { |
|
System.out.println("============= REDUCE ============="); |
|
long startTime = System.currentTimeMillis(); |
|
|
|
String errores = strings.stream().reduce( |
|
"", |
|
(errorsAccumulator, currentValidacion) -> { |
|
Optional<String> error = Optional.ofNullable(currentValidacion); |
|
if (error.isPresent()) { |
|
errorsAccumulator += error.get(); |
|
} |
|
return errorsAccumulator; |
|
}, |
|
String::concat |
|
); |
|
|
|
long endTime = System.currentTimeMillis(); |
|
System.out.println("That took " + (endTime - startTime) + " milliseconds"); |
|
|
|
return errores; |
|
} |
|
} |