Middle
Waarom worden streams gebruikt in de nieuwe versie van Java?
sobes.tech AI
Antwoord van AI
Het gebruik van streams in de nieuwere versies van Java (vanaf Java 8) wordt veroorzaakt door verschillende redenen die verband houden met efficiëntie, leesbaarheid van de code en parallelle gegevensverwerking:
- Functioneel programmeren: Streams maken het mogelijk om code in een meer declaratieve stijl te schrijven, waarbij je je richt op wat er gedaan moet worden met de gegevens, in plaats van hoe. Dit verbetert de leesbaarheid en onderhoudbaarheid.
- Parallelle verwerking: Streams maken het gemakkelijk om bewerkingen op collecties te paralleliseren via
parallelStream(). De JVM beheert de verdeling van gegevens en het samenvoegen van resultaten, wat de ontwikkeling van multithread-toepassingen vereenvoudigt. - Efficiëntie: Lazy evaluation in streams betekent dat operaties alleen worden uitgevoerd wanneer dat nodig is, wat de overhead vermindert. Intermediaire operaties (map, filter) worden niet onmiddellijk uitgevoerd tot een terminale operatie (collect, forEach) wordt aangeroepen.
- Verbeterde collectieverwerking: Ze bieden een set standaard- en high-level operaties voor het filteren, mappen en aggregeren van gegevens in collecties, wat de hoeveelheid herhalende code met lussen vermindert.
- Onveranderlijke operaties: Streams wijzigen de oorspronkelijke collectie waaruit ze zijn gemaakt niet, wat de principes van immutabiliteit ondersteunt en het debuggen vergemakkelijkt.
// Voorbeeld van het gebruik van streams voor filteren en mappen
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Creëren van een stream
.filter(name -> name.startsWith("C")) // Filteren
.map(String::toUpperCase) // Mappen
.collect(Collectors.toList()); // Verzamelen in een nieuwe lijst
System.out.println(filteredNames); // Output: [CHARLIE]
Parallelle streams:
// Voorbeeld van parallelle verwerking in een stream
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream() // Creëren van een parallelle stream
.mapToInt(Integer::intValue) // Omzetten naar IntStream
.sum(); // Optellen
System.out.println(sum); // Output: 55 (sneller berekend op meerkernsystemen)