Hello everyone,
Java 8 fundamentally changed the way we write code. The introduction of Lambda expressions and the Stream API brought a much more functional programming style to Java, allowing us developers to write cleaner, more concise and much more readable code.
In this post I have put together 50 essential snippets about lambda expressions. They demonstrate practical use - from basic operations to advanced stream processing. Whether you’re working on enterprise-grade code or preparing for a tech interview, these examples will sharpen your understanding and increase your productivity.
Let’s dive right in!
The Snippets: Lambda Expressions and Streams in Action
- Simple Runnable Example
Runnable meinRunnable = () -> System.out.println("Hallo, Lambda!");
new Thread(meinRunnable).start();
- Iterate through list with lambda
List<String> technologies = Arrays.asList("Java", "Spring", "Lambda");
technologies.forEach(element -> System.out.println(element));
- Filter list with lambda
List<String> programming languages = Arrays.asList("Java", "JavaScript", "Python");
List<String> filteredList = programminglanguages.stream()
.filter(language -> language.startsWith("J"))
.collect(Collectors.toList());
filteredList.forEach(System.out::println);
- Sort list with lambda
List<String> themen = Arrays.asList("Java", "Lambda", "Kafka");
themen.sort((thema1, thema2) -> thema1.compareTo(thema2));
themen.forEach(System.out::println);
- Use custom functional interface
@FunctionalInterface
interface calculator {
int calculate(int number1, int number2);
}
public static void main(String[] args) {
Calculator add = (number1, number2) -> number1 + number2;
Multiply calculator = (number1, number2) -> number1 * number2;
System.out.println("Addition: " + add.calculate(5, 3));
System.out.println("Multiplication: " + multiply.calculate(5, 3));
}
- Lambda bei Map-Iteration
Map<String, Integer> versions = new HashMap<>();
versions.put("Java", 8);
versions.put("Spring", 5);
versions.put("Lambda", 1);
versions.forEach((key, value) -> System.out.println(key + ": " + value));
- Create thread with Lambda
new Thread(() -> System.out.println("Thread with Lambda running!")).start();
- Lambda in Comparator
List<String> frameworks = Arrays.asList("Java", "Lambda", "Kafka");
frameworks.sort(Comparator.comparingInt(String::length));
frameworks.forEach(System.out::println);
- Method Reference with Lambda
List<String> tools = Arrays.asList("Java", "Lambda", "Kafka");
tools.forEach(System.out::println);
- Lambda with Optional
Optional<String> optionalValue = Optional.of("Java");
optionalValue.ifPresent(value -> System.out.println("Value is present: " + value));
- Lambda mit Predicate
Predicate<String> istLeer = s -> s.isEmpty();
System.out.println(istLeer.test("")); // true
System.out.println(istLeer.test("Java")); // false
- Lambda mit BiFunction
BiFunction<Integer, Integer, Integer> adder = (z1, z2) -> z1 + z2;
System.out.println(adder.apply(2, 3)); // 5
- Lambda mit Consumer
Consumer<String> issuer = s -> System.out.println(s);
issuer.accept("Hello, world!"); // Hello World!
- Lambda mit Supplier
Supplier<String> supplier = () -> "Java";
System.out.println(supplier.get()); // Java
- Lambda mit Stream Sorted
List<String> fruits = Arrays.asList("Banana", "Pear", "Grape");
fruits.stream()
.sorted()
.forEach(System.out::println);
- Lambda mit Stream Count
List<Integer> numbersQuantity = Arrays.asList(1, 2, 3, 4, 5);
long number = numbersQuantity.stream()
.count();
System.out.println("Count: " + count); // Number: 5
- Lambda mit Stream AnyMatch
List<String> suchliste = Arrays.asList("Java", "Spring", "Lambda");
boolean enthaeltJava = suchliste.stream()
.anyMatch(s -> s.equals("Java"));
System.out.println("Enthält 'Java': " + enthaeltJava); // true
- Lambda mit Stream AllMatch
List<Integer> evenNumbers = Arrays.asList(2, 4, 6, 8, 10);
boolean allEven = evenNumbers.stream()
.allMatch(n -> n % 2 == 0);
System.out.println("AllEven: " + allEven); // true
- Lambda mit Stream NoneMatch
List<String> technologyCheck = Arrays.asList("Java", "Spring", "Lambda");
boolean nonePython = technologyCheck.stream()
.noneMatch(s -> s.equals("Python"));
System.out.println("Does not contain 'Python': " + noPython); // true
- Lambda mit Stream FindFirst
List<String> firstElements = Arrays.asList("Java", "Spring", "Lambda");
Optional<String> first = firstElements.stream()
.findFirst();
first.ifPresent(System.out::println); // Java
- Lambda with Stream FindAny
List<String> anyElements = Arrays.asList("Java", "Spring", "Lambda");
Optional<String> any = anyElements.stream()
.findAny();
any.ifPresent(System.out::println);
- Lambda for summing integers
List<Integer> numbersSum = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbersSum.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println("Sum: " + sum); // Total: 15
- Lambda for largest integer
List<Integer> zahlenMax = Arrays.asList(1, 2, 3, 4, 5);
int maximum = zahlenMax.stream()
.mapToInt(Integer::intValue)
.max()
.orElse(Integer.MIN_VALUE);
System.out.println("Maximum: " + maximum); // Maximum: 5
- Lambda for smallest integer
List<Integer> zahlenMin = Arrays.asList(1, 2, 3, 4, 5);
int minimum = zahlenMin.stream()
.mapToInt(Integer::intValue)
.min()
.orElse(Integer.MAX_VALUE);
System.out.println("Minimum: " + minimum); // Minimum: 1
- Lambda for connecting strings
List<String> words = Arrays.asList("Java", "Spring", "Lambda");
String connected = words.stream()
.collect(Collectors.joining(", "));
System.out.println(connected); // Java, Spring, Lambda
- Lambda mit Stream MapToInt
List<String> namenLaengen = Arrays.asList("Java", "Spring", "Lambda");
namenLaengen.stream()
.mapToInt(String::length)
.forEach(System.out::println); // 4, 6, 6
- Lambda mit Stream Collect to Set
List<String> duplicates = Arrays.asList("Java", "Spring", "Lambda", "Spring");
Set<String> unique = duplicates.stream()
.collect(Collectors.toSet());
unique.forEach(System.out::println); // Java, Spring, Lambda
- Lambda mit Stream GroupingBy
List<String> haeufigkeitListe = Arrays.asList("Java", "Spring", "Lambda", "Java");
Map<String, Long> haeufigkeit = haeufigkeitListe.stream()
.collect(Collectors.groupingBy(s -> s, Collectors.counting()));
haeufigkeit.forEach((schluessel, zaehler) -> System.out.println(schluessel + ": " + zaehler));
// Java: 2, Spring: 1, Lambda: 1
- Lambda mit Stream PartitioningBy
List<Integer> numbersPartition = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Map<Boolean, List<Integer>> partitioned = numbersPartition.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
partitioned.forEach((isEven, list) -> System.out.println(isEven + ": " + list));
// true: [2, 4, 6, 8, 10], false: [1, 3, 5, 7, 9]
- Lambda mit Stream Counting (Collector)
List<String> elementsCount = Arrays.asList("Java", "Spring", "Lambda");
long numberCollector = elementsCount.stream()
.collect(Collectors.counting());
System.out.println("Count (Collector): " + countCollector); // Number (Collector): 3
- Lambda mit Stream SummarizingInt
List<Integer> statisticsNumbers = Arrays.asList(1, 2, 3, 4, 5);
IntSummaryStatistics statistics = statisticsNumbers.stream()
.collect(Collectors.summarizingInt(Integer::intValue));
System.out.println("Sum: " + statistics.getSum());
System.out.println("Average: " + statistics.getAverage());
System.out.println("Maximum: " + statistics.getMax());
System.out.println("Minimum: " + statistics.getMin());
- Lambda mit Stream Mapping (GroupingBy)
List<String> lengthByGroups = Arrays.asList("Java", "Spring", "Lambda");
Map<Integer, List<String>> byLengthGroup = lengthByGroup.stream()
.collect(Collectors.groupingBy(String::length));
GroupedbyLength.forEach((length, list) -> System.out.println(length + ": " + list));
// 4: [Java], 6: [Spring, Lambda]
- Lambda mit Stream Joining ohne Delimiter
List<String> without separation = Arrays.asList("Java", "Spring", "Lambda");
String connectedWithoutDelimiter = withoutSeparation.stream()
.collect(Collectors.joining());
System.out.println(connectedWithoutDelimiter); // JavaSpringLambda
- Lambda mit Stream ToMap
List<String> listZuMap = Arrays.asList("Java", "Spring", "Lambda");
Map<String, Integer> assigned = listToMap.stream()
.collect(Collectors.toMap(s -> s, String::length));
assigned.forEach((key, value) -> System.Lister.println(key + ": " + value));
// Java: 4, Spring: 6, Lambda: 6
- Lambda to create a stream
Stream<String> meinStream = Stream.of("Java", "Spring", "Lambda");
meinStream.forEach(System.out::println);
- Lambda mit Stream Limit
Stream<String> begrenzterStream = Stream.of("Java", "Spring", "Lambda", "Kafka");
begrenzterStream.limit(2)
.forEach(System.out::println); // Java, Spring
- Lambda mit Stream Peek
Stream<String> peekStream = Stream.of("Java", "Spring", "Lambda", "Kafka");
peekStream.peek(System.out::println)
.collect(Collectors.toList());
- Lambda mit Optional (ifPresent)
Optional<String> optionalVorhanden = Optional.of("Java");
optionalVorhanden.ifPresent(System.out::println); // Java
- Lambda mit Stream Distinct
List<String> duplikateEntfernen = Arrays.asList("Java", "Spring", "Java", "Lambda");
duplikateEntfernen.stream()
.distinct()
.forEach(System.out::println);
// Java, Spring, Lambda
- Lambda mit Stream FlatMap
List<List<String>> listeVonListen = Arrays.asList(
Arrays.asList("Java", "Spring"),
Arrays.asList("Lambda", "Kafka")
);
listeVonListen.stream()
.flatMap(List::stream)
.forEach(System.out::println);
// Java, Spring, Lambda, Kafka
- Lambda mit Stream Reduce
List<Integer> numbersReduce = Arrays.asList(1, 2, 3, 4, 5);
int reducedSum = numbersReduce.stream()
.reduce(0, (accumulator, element) -> accumulator + element);
System.out.println("Sum(Reduce): " + reducedSum); // Sum (Reduce): 15
- Lambda mit Stream Map
List<String> namenGross = Arrays.asList("Java", "Spring", "Lambda");
namenGross.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
// JAVA, SPRING, LAMBDA
- Lambda with Stream Filter and Map
List<String> gefiltertUndGross = Arrays.asList("Java", "Spring", "Lambda");
gefiltertUndGross.stream()
.filter(s -> s.startsWith("J"))
.map(String::toUpperCase)
.forEach(System.out::println);
// JAVA
- Lambda mit Stream Sorted mit Comparator (Reverse)
List<String> sortedReverse = Arrays.asList("Java", "Spring", "Lambda");
sortedReverse.stream()
.sorted((s1, s2) -> s2.compareTo(s1)) // reverse order
.forEach(System.out::println);
// Spring, Lambda, Java
- Lambda mit Stream Iterate
Stream.iterate(0, n -> n + 2)
.limit(5)
.forEach(System.out::println);
// 0, 2, 4, 6, 8
- Lambda mit Stream Generate
Stream.generate(() -> "Java")
.limit(3)
.forEach(System.out::println);
// Java, Java, Java
- Lambda mit Stream of Primitives
IntStream.range(1, 4)
.forEach(System.out::println);
// 1, 2, 3
- Lambda mit Stream to Array
List<String> listeZuArray = Arrays.asList("Java", "Spring", "Lambda");
String[] array = listeZuArray.stream()
.toArray(String[]::new);
System.out.println(Arrays.toString(array));
// [Java, Spring, Lambda]
- Lambda mit Stream Collect to List
Stream<String> streamZuListe = Stream.of("Java", "Spring", "Lambda");
List<String> gesammelteListe = streamZuListe
.collect(Collectors.toList());
System.out.println(gesammelteListe);
// [Java, Spring, Lambda]
I hope this collection of Lambda and Stream snippets gives you a good overview and practical examples. Functional programming with Java 8 is a powerful tool that makes your code cleaner and your development more efficient.
Which snippets do you find most useful in your everyday work? Let me know!
![[EN] Java 8: Revolution der Code-Schreibweise – 50 essentielle Lambda- und Stream-Snippets](/images/Java-Lambda-Streams-Header.png)