Skip to content

Instantly share code, notes, and snippets.

@saugatrai33
Created February 28, 2021 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saugatrai33/bce7818d01c4405792bc61be49aebfef to your computer and use it in GitHub Desktop.
Save saugatrai33/bce7818d01c4405792bc61be49aebfef to your computer and use it in GitHub Desktop.
Java 8 Streams API
package com.company;
public enum Gender {
MALE, FEMALE
}
package com.company;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> people = getPeople();
// Filter
List<Person> females = people.stream()
.filter(person -> person.getGender().equals(Gender.FEMALE))
.collect(Collectors.toList());
// females.forEach(System.out::println);
// Sort
List<Person> sortByAgeAndGender = people.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Person::getGender).reversed())
.collect(Collectors.toList());
// sortByAgeAndGender.forEach(System.out::println);
// All matches
boolean allPersonAgeGreaterThan8 = people.stream()
.allMatch(person -> person.getAge() > 8);
// System.out.println(allPersonAgeGreaterThan8);
// Any matches
boolean anyPersonAgeGreaterThan8 = people.stream()
.anyMatch(person -> person.getAge() > 8);
// System.out.println(anyPersonAgeGreaterThan8);
// reduce
Integer totalAges = people.stream()
.map(Person::getAge)
.reduce(0, Integer::sum);
// System.out.println(totalAges);
//None matches
boolean noneMathAgeGreaterThan8 = people.stream()
.noneMatch(person -> person.getAge() > 8);
// System.out.println(noneMathAgeGreaterThan8);
// Max
people.stream()
.max(Comparator.comparing(Person::getAge));
// .ifPresent(System.out::println);
// Min
people.stream()
.min(Comparator.comparing(Person::getAge));
// .ifPresent(System.out::println);
// Group
Map<Gender, List<Person>> groupByGender = people.stream()
.collect(Collectors.groupingBy(Person::getGender));
/*groupByGender.forEach(((gender, people1) -> {
System.out.println(gender);
people1.forEach(System.out::println);
}));*/
// Optionals
Optional<String> personWithMaxAge = people.stream()
.filter(person -> person.getGender().equals(Gender.FEMALE))
.max(Comparator.comparing(Person::getAge))
.map(Person::getName);
// personWithMaxAge.ifPresent(System.out::println);
}
private static List<Person> getPeople() {
return List.of(
new Person("Antonio", 20, Gender.MALE),
new Person("Alina Smith", 33, Gender.FEMALE),
new Person("Helen White", 57, Gender.FEMALE),
new Person("Alex Boz", 14, Gender.MALE),
new Person("Jamie Goa", 99, Gender.MALE),
new Person("Anna Cook", 7, Gender.FEMALE),
new Person("Zelda Brown", 120, Gender.FEMALE)
);
}
}
package com.company;
public class Person {
private final String name;
private final Integer age;
private final Gender gender;
public Person(String name, Integer age, Gender gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Gender getGender() {
return gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment