Stream API я в своих проектах использую достаточно давно. Многие вещи решать значительно проще с помощью Stream API, а многие нет.

Все примеры на простеньком классе User

public class User {
	private String name;
	private int age;
	
	
	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	

}

Создадим коллекцию объектов типо User:

List<User> users = new ArrayList<>(); 
users.add(new User("Ivanov", 22));
users.add(new User("Petrov", 25));
users.add(new User("Sidorov", 50));
users.add(new User("Zabavski", 32));
users.add(new User("Melnikov", 14));

1) Вывести пользователя с максимальным возрастом:
Типичное решение со стримами:

User oldestUserStrem = users.stream().max(Comparator.comparing(User::getAge)).get();
System.out.println("oldestUserStrem is " + oldestUserStrem);

Но можно значительно проще:

User oldestUser = Collections.max(users, Comparator.comparing(User::getAge));		
System.out.println("oldestUser is " + oldestUser);

Если сделаем статические импорты, то вид вообще примитивен:

User oldestUser = max(users, comparing(User::getAge));

Вообще странно, что метод max класса Collections редко используют.

2)Перебрать все элементы коллекции и, например, если возраст 22 года изменить на 55 лет.

 users.stream().forEach((user) -> {
    
      if (user.getAge() == 22) {
	      	user.setAge(55);
       }
});

Зачем здесь стрим ? у нас нет никаких промежуточных операций. Намного проще так:

users.forEach((user) -> {
		       
        if (user.getAge() == 22) {
        	user.setAge(55);
        }
});

3)Подсчитать количество элементов в коллекции.

users.stream().count()

Не понятно, зачем так писат если у нас нет промежуточных операций. Можно просто написать:

users.size()

4)Проверить, что есть пользователи, старше 30 лет

if (users.stream().filter(p->p.getAge()>30).findFirst().isPresent()) {
	System.out.println("Есть пользователи старше 30 лет");
}

Зачем так писат, если можно намного проще с anyMatch:
if (users.stream().anyMatch(p->p.getAge()>30)) {
	System.out.println("Есть пользователи старше 30 лет");
}

Реклама