Stream Operations
Stream Filter and Map
Processing collections often requires selecting specific items and transforming them. Stream's filter and map operations let you declaratively express "keep items matching X, then transform each to Y" without manual loops or intermediate collections.
Filtering
The filter operation takes a Predicate<T> and returns a stream containing only elements where the predicate returns true.
import java.util.*;
import java.util.stream.*;
public class Filter {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
int minValue = 5;
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("evens: " + evens);
List<Integer> large = nums.stream()
.filter(n -> n > minValue)
.collect(Collectors.toList());
System.out.println("large: " + large);
List<Integer> evenAndLarge = nums.stream()
.filter(n -> n % 2 == 0)
.filter(n -> n > 4)
.collect(Collectors.toList());
System.out.println("evenAndLarge: " + evenAndLarge);
}
}
import java.util.*;
import java.util.stream.*;
public class Filter {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
int minValue = 3;
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("evens: " + evens);
List<Integer> large = nums.stream()
.filter(n -> n > minValue)
.collect(Collectors.toList());
System.out.println("large: " + large);
List<Integer> evenAndLarge = nums.stream()
.filter(n -> n % 2 == 0)
.filter(n -> n > 4)
.collect(Collectors.toList());
System.out.println("evenAndLarge: " + evenAndLarge);
}
}
import java.util.*;
import java.util.stream.*;
public class Filter {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
int minValue = 7;
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("evens: " + evens);
List<Integer> large = nums.stream()
.filter(n -> n > minValue)
.collect(Collectors.toList());
System.out.println("large: " + large);
List<Integer> evenAndLarge = nums.stream()
.filter(n -> n % 2 == 0)
.filter(n -> n > 4)
.collect(Collectors.toList());
System.out.println("evenAndLarge: " + evenAndLarge);
}
}
nums ← [1, 2, 3, 4, 5, 6, 7, 8], minValue ← 5, evens ← [2, 4, 6, 8]
4public class Filter {5 public static void main(String[] args) {6 List<Integer> nums→ [1, 2, 3, 4, 5, 6, 7, 8] = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);7 int minValue→ 5 = 5; //@minValue=5, 3, 789 List<Integer> evens→ [2, 4, 6, 8] = nums.stream()10 .filter(n -> n % 2 == 0)11 .collect(Collectors.toList());12 System.out.println("evens: " + evens[2, 4, 6, 8]);1314 List<Integer> large→ [6, 7, 8] = nums.stream()15 .filter(n -> n > minValue)16 .collect(Collectors.toList());17 System.out.println("large: " + large[6, 7, 8]);1819 List<Integer> evenAndLarge→ [6, 8] = nums.stream()20 .filter(n -> n % 2 == 0)21 .filter(n -> n > 4)22 .collect(Collectors.toList());23 System.out.println("evenAndLarge: " + evenAndLarge[6, 8]);outputevens: [2, 4, 6, 8] large: [6, 7, 8] evenAndLarge: [6, 8]
nums ← [1, 2, 3, 4, 5, 6, 7, 8], minValue ← 3, evens ← [2, 4, 6, 8]
4public class Filter {5 public static void main(String[] args) {6 List<Integer> nums→ [1, 2, 3, 4, 5, 6, 7, 8] = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);7 int minValue→ 3 = 3;89 List<Integer> evens→ [2, 4, 6, 8] = nums.stream()10 .filter(n -> n % 2 == 0)11 .collect(Collectors.toList());12 System.out.println("evens: " + evens[2, 4, 6, 8]);1314 List<Integer> large→ [4, 5, 6, 7, 8] = nums.stream()15 .filter(n -> n > minValue)16 .collect(Collectors.toList());17 System.out.println("large: " + large[4, 5, 6, 7, 8]);1819 List<Integer> evenAndLarge→ [6, 8] = nums.stream()20 .filter(n -> n % 2 == 0)21 .filter(n -> n > 4)22 .collect(Collectors.toList());23 System.out.println("evenAndLarge: " + evenAndLarge[6, 8]);outputevens: [2, 4, 6, 8] large: [4, 5, 6, 7, 8] evenAndLarge: [6, 8]
nums ← [1, 2, 3, 4, 5, 6, 7, 8], minValue ← 7, evens ← [2, 4, 6, 8]
4public class Filter {5 public static void main(String[] args) {6 List<Integer> nums→ [1, 2, 3, 4, 5, 6, 7, 8] = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);7 int minValue→ 7 = 7;89 List<Integer> evens→ [2, 4, 6, 8] = nums.stream()10 .filter(n -> n % 2 == 0)11 .collect(Collectors.toList());12 System.out.println("evens: " + evens[2, 4, 6, 8]);1314 List<Integer> large→ [8] = nums.stream()15 .filter(n -> n > minValue)16 .collect(Collectors.toList());17 System.out.println("large: " + large[8]);1819 List<Integer> evenAndLarge→ [6, 8] = nums.stream()20 .filter(n -> n % 2 == 0)21 .filter(n -> n > 4)22 .collect(Collectors.toList());23 System.out.println("evenAndLarge: " + evenAndLarge[6, 8]);outputevens: [2, 4, 6, 8] large: [8] evenAndLarge: [6, 8]
Mapping
The map operation takes a Function<T, R> and produces a new stream where each element has been transformed.
import java.util.*;
import java.util.stream.*;
public class Map {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
String suffix = "!";
List<String> upper = words.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("upper: " + upper);
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println("lengths: " + lengths);
List<String> transformed = words.stream()
.map(s -> s.toUpperCase())
.map(s -> s + suffix)
.collect(Collectors.toList());
System.out.println("transformed: " + transformed);
}
}
import java.util.*;
import java.util.stream.*;
public class Map {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
String suffix = "?";
List<String> upper = words.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("upper: " + upper);
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println("lengths: " + lengths);
List<String> transformed = words.stream()
.map(s -> s.toUpperCase())
.map(s -> s + suffix)
.collect(Collectors.toList());
System.out.println("transformed: " + transformed);
}
}
import java.util.*;
import java.util.stream.*;
public class Map {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
String suffix = "...";
List<String> upper = words.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("upper: " + upper);
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println("lengths: " + lengths);
List<String> transformed = words.stream()
.map(s -> s.toUpperCase())
.map(s -> s + suffix)
.collect(Collectors.toList());
System.out.println("transformed: " + transformed);
}
}
words ← [apple, banana, cherry], suffix ← !, upper ← [APPLE, BANANA, CHERRY]
4public class Map {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 String suffix→ ! = "!"; //@suffix="!", "?", "..."89 List<String> upper→ [APPLE, BANANA, CHERRY] = words.stream()10 .map(String::toUpperCase)11 .collect(Collectors.toList());12 System.out.println("upper: " + upper[APPLE, BANANA, CHERRY]);1314 List<Integer> lengths→ [5, 6, 6] = words.stream()15 .map(String::length)16 .collect(Collectors.toList());17 System.out.println("lengths: " + lengths[5, 6, 6]);1819 List<String> transformed→ [APPLE!, BANANA!, CHERRY!] = words.stream()20 .map(s -> s.toUpperCase())21 .map(s -> s + suffix)22 .collect(Collectors.toList());23 System.out.println("transformed: " + transformed[APPLE!, BANANA!, CHERRY!]);outputupper: [APPLE, BANANA, CHERRY] lengths: [5, 6, 6] transformed: [APPLE!, BANANA!, CHERRY!]
words ← [apple, banana, cherry], suffix ← ?, upper ← [APPLE, BANANA, CHERRY]
4public class Map {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 String suffix→ ? = "?";89 List<String> upper→ [APPLE, BANANA, CHERRY] = words.stream()10 .map(String::toUpperCase)11 .collect(Collectors.toList());12 System.out.println("upper: " + upper[APPLE, BANANA, CHERRY]);1314 List<Integer> lengths→ [5, 6, 6] = words.stream()15 .map(String::length)16 .collect(Collectors.toList());17 System.out.println("lengths: " + lengths[5, 6, 6]);1819 List<String> transformed→ [APPLE?, BANANA?, CHERRY?] = words.stream()20 .map(s -> s.toUpperCase())21 .map(s -> s + suffix)22 .collect(Collectors.toList());23 System.out.println("transformed: " + transformed[APPLE?, BANANA?, CHERRY?]);outputupper: [APPLE, BANANA, CHERRY] lengths: [5, 6, 6] transformed: [APPLE?, BANANA?, CHERRY?]
words ← [apple, banana, cherry], suffix ← ..., upper ← [APPLE, BANANA, CHERRY]
4public class Map {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 String suffix→ ... = "...";89 List<String> upper→ [APPLE, BANANA, CHERRY] = words.stream()10 .map(String::toUpperCase)11 .collect(Collectors.toList());12 System.out.println("upper: " + upper[APPLE, BANANA, CHERRY]);1314 List<Integer> lengths→ [5, 6, 6] = words.stream()15 .map(String::length)16 .collect(Collectors.toList());17 System.out.println("lengths: " + lengths[5, 6, 6]);1819 List<String> transformed→ [APPLE..., BANANA..., CHERRY...] = words.stream()20 .map(s -> s.toUpperCase())21 .map(s -> s + suffix)22 .collect(Collectors.toList());23 System.out.println("transformed: " + transformed[APPLE..., BANANA..., CHERRY...]);outputupper: [APPLE, BANANA, CHERRY] lengths: [5, 6, 6] transformed: [APPLE..., BANANA..., CHERRY...]
Chaining Filter and Map
Filter and map compose naturally into pipelines. You can chain multiple operations, and they execute lazily only when a terminal operation is called.
import java.util.*;
import java.util.stream.*;
public class Chain {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "a", "banana", "b", "cherry", "");
int minLength = 1;
List<String> result = words.stream()
.filter(s -> s.length() > minLength)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("result: " + result);
List<Integer> nums = Arrays.asList(-5, -2, 0, 3, 7);
List<Integer> processed = nums.stream()
.map(n -> n * n)
.filter(n -> n > 10)
.collect(Collectors.toList());
System.out.println("processed: " + processed);
List<String> names = Arrays.asList(" Alice ", " bob", "CHARLIE ");
List<String> normalized = names.stream()
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(String::toLowerCase)
.sorted()
.collect(Collectors.toList());
System.out.println("normalized: " + normalized);
}
}
import java.util.*;
import java.util.stream.*;
public class Chain {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "a", "banana", "b", "cherry", "");
int minLength = 3;
List<String> result = words.stream()
.filter(s -> s.length() > minLength)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("result: " + result);
List<Integer> nums = Arrays.asList(-5, -2, 0, 3, 7);
List<Integer> processed = nums.stream()
.map(n -> n * n)
.filter(n -> n > 10)
.collect(Collectors.toList());
System.out.println("processed: " + processed);
List<String> names = Arrays.asList(" Alice ", " bob", "CHARLIE ");
List<String> normalized = names.stream()
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(String::toLowerCase)
.sorted()
.collect(Collectors.toList());
System.out.println("normalized: " + normalized);
}
}
words ← [apple, a, banana, b, cherry, ], minLength ← 1, result ← [APPLE, BANANA, CHERRY]
4public class Chain {5 public static void main(String[] args) {6 List<String> words→ [apple, a, banana, b, cherry, ] = Arrays.asList("apple", "a", "banana", "b", "cherry", "");7 int minLength→ 1 = 1; //@minLength=1, 389 List<String> result→ [APPLE, BANANA, CHERRY] = words.stream()10 .filter(s -> s.length() > minLength)11 .map(String::toUpperCase)12 .collect(Collectors.toList());13 System.out.println("result: " + result[APPLE, BANANA, CHERRY]);1415 List<Integer> nums→ [-5, -2, 0, 3, 7] = Arrays.asList(-5, -2, 0, 3, 7);16 List<Integer> processed→ [25, 49] = nums.stream()17 .map(n -> n * n)18 .filter(n -> n > 10)19 .collect(Collectors.toList());20 System.out.println("processed: " + processed[25, 49]);2122 List<String> names→ [ Alice , bob, CHARLIE ] = Arrays.asList(" Alice ", " bob", "CHARLIE ");23 List<String> normalized→ [alice, bob, charlie] = names.stream()24 .map(String::trim)25 .filter(s -> !s.isEmpty())26 .map(String::toLowerCase)27 .sorted()28 .collect(Collectors.toList());29 System.out.println("normalized: " + normalized[alice, bob, charlie]);outputresult: [APPLE, BANANA, CHERRY] processed: [25, 49] normalized: [alice, bob, charlie]
words ← [apple, a, banana, b, cherry, ], minLength ← 3, result ← [APPLE, BANANA, CHERRY]
4public class Chain {5 public static void main(String[] args) {6 List<String> words→ [apple, a, banana, b, cherry, ] = Arrays.asList("apple", "a", "banana", "b", "cherry", "");7 int minLength→ 3 = 3;89 List<String> result→ [APPLE, BANANA, CHERRY] = words.stream()10 .filter(s -> s.length() > minLength)11 .map(String::toUpperCase)12 .collect(Collectors.toList());13 System.out.println("result: " + result[APPLE, BANANA, CHERRY]);1415 List<Integer> nums→ [-5, -2, 0, 3, 7] = Arrays.asList(-5, -2, 0, 3, 7);16 List<Integer> processed→ [25, 49] = nums.stream()17 .map(n -> n * n)18 .filter(n -> n > 10)19 .collect(Collectors.toList());20 System.out.println("processed: " + processed[25, 49]);2122 List<String> names→ [ Alice , bob, CHARLIE ] = Arrays.asList(" Alice ", " bob", "CHARLIE ");23 List<String> normalized→ [alice, bob, charlie] = names.stream()24 .map(String::trim)25 .filter(s -> !s.isEmpty())26 .map(String::toLowerCase)27 .sorted()28 .collect(Collectors.toList());29 System.out.println("normalized: " + normalized[alice, bob, charlie]);outputresult: [APPLE, BANANA, CHERRY] processed: [25, 49] normalized: [alice, bob, charlie]
FlatMap
When a mapping function produces a stream for each element (e.g., splitting strings into words), use flatMap to flatten the nested streams into a single stream.
import java.util.*;
import java.util.stream.*;
public class Flatmap {
public static void main(String[] args) {
List<List<Integer>> nested = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5),
Arrays.asList(6, 7, 8, 9)
);
List<Integer> flat = nested.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
System.out.println("flat: " + flat);
List<String> sentences = Arrays.asList("hello world", "foo bar", "test");
List<String> allWords = sentences.stream()
.flatMap(s -> Arrays.stream(s.split(" ")))
.collect(Collectors.toList());
System.out.println("allWords: " + allWords);
List<Integer> evensFlat = nested.stream()
.flatMap(list -> list.stream())
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("evensFlat: " + evensFlat);
}
}
import java.util.*;
import java.util.stream.*;
public class Flatmap {
public static void main(String[] args) {
List<List<Integer>> nested = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5),
Arrays.asList(6, 7, 8, 9)
);
List<Integer> flat = nested.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
System.out.println("flat: " + flat);
List<String> sentences = Arrays.asList("red blue", "green", "blue red");
List<String> allWords = sentences.stream()
.flatMap(s -> Arrays.stream(s.split(" ")))
.collect(Collectors.toList());
System.out.println("allWords: " + allWords);
List<Integer> evensFlat = nested.stream()
.flatMap(list -> list.stream())
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("evensFlat: " + evensFlat);
}
}
nested ← [[1, 2, 3], [4, 5], [6, 7, 8, 9]], flat ← [1, 2, 3, 4, 5, 6, 7, 8, 9]
4public class Flatmap {5 public static void main(String[] args) {6 List<List<Integer>> nested→ [[1, 2, 3], [4, 5], [6, 7, 8, 9]] = Arrays.asList(7 Arrays.asList(1, 2, 3),8 Arrays.asList(4, 5),9 Arrays.asList(6, 7, 8, 9)10 );1112 List<Integer> flat→ [1, 2, 3, 4, 5, 6, 7, 8, 9] = nested.stream()13 .flatMap(list -> list.stream())14 .collect(Collectors.toList());15 System.out.println("flat: " + flat[1, 2, 3, 4, 5, 6, 7, 8, 9]);1617 List<String> sentences→ [hello world, foo bar, test] = Arrays.asList("hello world", "foo bar", "test"); //@sentences=Arrays.asList("hello world", "foo bar", "test"), Arrays.asList("red blue", "green", "blue red")18 List<String> allWords→ [hello, world, foo, bar, test] = sentences.stream()19 .flatMap(s -> Arrays.stream(s.split(" ")))20 .collect(Collectors.toList());21 System.out.println("allWords: " + allWords[hello, world, foo, bar, test]);2223 List<Integer> evensFlat→ [2, 4, 6, 8] = nested.stream()24 .flatMap(list -> list.stream())25 .filter(n -> n % 2 == 0)26 .collect(Collectors.toList());27 System.out.println("evensFlat: " + evensFlat[2, 4, 6, 8]);outputflat: [1, 2, 3, 4, 5, 6, 7, 8, 9] allWords: [hello, world, foo, bar, test] evensFlat: [2, 4, 6, 8]
nested ← [[1, 2, 3], [4, 5], [6, 7, 8, 9]], flat ← [1, 2, 3, 4, 5, 6, 7, 8, 9]
4public class Flatmap {5 public static void main(String[] args) {6 List<List<Integer>> nested→ [[1, 2, 3], [4, 5], [6, 7, 8, 9]] = Arrays.asList(7 Arrays.asList(1, 2, 3),8 Arrays.asList(4, 5),9 Arrays.asList(6, 7, 8, 9)10 );1112 List<Integer> flat→ [1, 2, 3, 4, 5, 6, 7, 8, 9] = nested.stream()13 .flatMap(list -> list.stream())14 .collect(Collectors.toList());15 System.out.println("flat: " + flat[1, 2, 3, 4, 5, 6, 7, 8, 9]);1617 List<String> sentences→ [red blue, green, blue red] = Arrays.asList("red blue", "green", "blue red");18 List<String> allWords→ [red, blue, green, blue, red] = sentences.stream()19 .flatMap(s -> Arrays.stream(s.split(" ")))20 .collect(Collectors.toList());21 System.out.println("allWords: " + allWords[red, blue, green, blue, red]);2223 List<Integer> evensFlat→ [2, 4, 6, 8] = nested.stream()24 .flatMap(list -> list.stream())25 .filter(n -> n % 2 == 0)26 .collect(Collectors.toList());27 System.out.println("evensFlat: " + evensFlat[2, 4, 6, 8]);outputflat: [1, 2, 3, 4, 5, 6, 7, 8, 9] allWords: [red, blue, green, blue, red] evensFlat: [2, 4, 6, 8]
Primitive Streams
Use specialized streams for primitives to avoid boxing overhead:
mapToInt,mapToDouble,mapToLongconvert to primitive streamsIntStream,DoubleStream,LongStreamprovide specialized operations
import java.util.*;
import java.util.stream.*;
public class PrimitiveStreams {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
int rangeEnd = 6;
int totalLength = words.stream()
.mapToInt(String::length)
.sum();
System.out.println("totalLength: " + totalLength);
List<Integer> squares = IntStream.range(1, rangeEnd)
.map(n -> n * n)
.boxed()
.collect(Collectors.toList());
System.out.println("squares: " + squares);
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
double avg = nums.stream()
.mapToDouble(Integer::doubleValue)
.average()
.orElse(0.0);
System.out.println("avg: " + avg);
IntStream.of(3, 1, 4, 1, 5)
.sorted()
.distinct()
.forEach(n -> System.out.print(n + " "));
System.out.println();
}
}
import java.util.*;
import java.util.stream.*;
public class PrimitiveStreams {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
int rangeEnd = 4;
int totalLength = words.stream()
.mapToInt(String::length)
.sum();
System.out.println("totalLength: " + totalLength);
List<Integer> squares = IntStream.range(1, rangeEnd)
.map(n -> n * n)
.boxed()
.collect(Collectors.toList());
System.out.println("squares: " + squares);
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
double avg = nums.stream()
.mapToDouble(Integer::doubleValue)
.average()
.orElse(0.0);
System.out.println("avg: " + avg);
IntStream.of(3, 1, 4, 1, 5)
.sorted()
.distinct()
.forEach(n -> System.out.print(n + " "));
System.out.println();
}
}
import java.util.*;
import java.util.stream.*;
public class PrimitiveStreams {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
int rangeEnd = 8;
int totalLength = words.stream()
.mapToInt(String::length)
.sum();
System.out.println("totalLength: " + totalLength);
List<Integer> squares = IntStream.range(1, rangeEnd)
.map(n -> n * n)
.boxed()
.collect(Collectors.toList());
System.out.println("squares: " + squares);
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
double avg = nums.stream()
.mapToDouble(Integer::doubleValue)
.average()
.orElse(0.0);
System.out.println("avg: " + avg);
IntStream.of(3, 1, 4, 1, 5)
.sorted()
.distinct()
.forEach(n -> System.out.print(n + " "));
System.out.println();
}
}
words ← [apple, banana, cherry], rangeEnd ← 6, totalLength ← 17
4public class PrimitiveStreams {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 int rangeEnd→ 6 = 6; //@rangeEnd=6, 4, 889 int totalLength→ 17 = words.stream()10 .mapToInt(String::length)11 .sum();12 System.out.println("totalLength: " + totalLength17);1314 List<Integer> squares→ [1, 4, 9, 16, 25] = IntStream.range(1, rangeEnd6)15 .map(n -> n * n)16 .boxed()17 .collect(Collectors.toList());18 System.out.println("squares: " + squares[1, 4, 9, 16, 25]);1920 List<Integer> nums→ [1, 2, 3, 4, 5] = Arrays.asList(1, 2, 3, 4, 5);21 double avg→ 3.0 = nums.stream()22 .mapToDouble(Integer::doubleValue)23 .average()24 .orElse(0.0);25 System.out.println("avg: " + avg3.0);2627 IntStream.of(3, 1, 4, 1, 5)28 .sorted()29 .distinct()30 .forEach(n -> System.out.print(n + " "));31 System.out.println();outputtotalLength: 17 squares: [1, 4, 9, 16, 25] avg: 3.0
words ← [apple, banana, cherry], rangeEnd ← 4, totalLength ← 17
4public class PrimitiveStreams {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 int rangeEnd→ 4 = 4;89 int totalLength→ 17 = words.stream()10 .mapToInt(String::length)11 .sum();12 System.out.println("totalLength: " + totalLength17);1314 List<Integer> squares→ [1, 4, 9] = IntStream.range(1, rangeEnd4)15 .map(n -> n * n)16 .boxed()17 .collect(Collectors.toList());18 System.out.println("squares: " + squares[1, 4, 9]);1920 List<Integer> nums→ [1, 2, 3, 4, 5] = Arrays.asList(1, 2, 3, 4, 5);21 double avg→ 3.0 = nums.stream()22 .mapToDouble(Integer::doubleValue)23 .average()24 .orElse(0.0);25 System.out.println("avg: " + avg3.0);2627 IntStream.of(3, 1, 4, 1, 5)28 .sorted()29 .distinct()30 .forEach(n -> System.out.print(n + " "));31 System.out.println();outputtotalLength: 17 squares: [1, 4, 9] avg: 3.0
words ← [apple, banana, cherry], rangeEnd ← 8, totalLength ← 17
4public class PrimitiveStreams {5 public static void main(String[] args) {6 List<String> words→ [apple, banana, cherry] = Arrays.asList("apple", "banana", "cherry");7 int rangeEnd→ 8 = 8;89 int totalLength→ 17 = words.stream()10 .mapToInt(String::length)11 .sum();12 System.out.println("totalLength: " + totalLength17);1314 List<Integer> squares→ [1, 4, 9, 16, 25, 36, 49] = IntStream.range(1, rangeEnd8)15 .map(n -> n * n)16 .boxed()17 .collect(Collectors.toList());18 System.out.println("squares: " + squares[1, 4, 9, 16, 25, 36, 49]);1920 List<Integer> nums→ [1, 2, 3, 4, 5] = Arrays.asList(1, 2, 3, 4, 5);21 double avg→ 3.0 = nums.stream()22 .mapToDouble(Integer::doubleValue)23 .average()24 .orElse(0.0);25 System.out.println("avg: " + avg3.0);2627 IntStream.of(3, 1, 4, 1, 5)28 .sorted()29 .distinct()30 .forEach(n -> System.out.print(n + " "));31 System.out.println();outputtotalLength: 17 squares: [1, 4, 9, 16, 25, 36, 49] avg: 3.0
Exercise: Practical.java
Filter a list of products by price range, then map to product names