Вы должны выполнить итерацию, так или иначе
Так что теперь без итерации я хочу установить для всех флагов isActive
значение true, возможно ли это в java?
Нет, не без итерации. Вы должны посетить каждый объект и установить его свойство (или вызвать метод, который устанавливает его свойство).
Существует несколько способов итерации в Java. Вы нашли один из них, используя потоки. Обычная for
является более старым традиционным подходом.
Что касается использования параллельного потока для использования нескольких ядер, то это дает существенное преимущество, только если у вас очень большие объемы данных. Я предлагаю не распараллеливать, пока у вас не будет проверенной проблемы, тестирование и доказало свою выгоду, и , которые, как вы знаете наверняка, в вашем сценарии развертывания, вероятно, будут иметь ядра, часто доступные во время выполнения.
Сначала нам понадобится класс Student
.
package work.basil.example;
public class Student
{
// ---------| Member Vars |-------------------------
private String name;
private Boolean active;
// ---------| Constructors |-------------------------
public Student ( String name , Boolean active )
{
this.name = name;
this.active = active;
}
// ---------| Logic |-------------------------
public void activate ( )
{
this.active = Boolean.TRUE;
}
// ---------| Object |-------------------------
@Override
public String toString ( )
{
return "Student{ " +
"name='" + name + '\'' +
" | active=" + active +
" }";
}
}
Создание некоторых примеров данных для работы.
List < Student > students = List.of(
new Student( "Alice" , Boolean.FALSE ) ,
new Student( "Bob" , Boolean.FALSE ) ,
new Student( "Carol" , Boolean.TRUE )
);
Для каждого l oop
L oop для каждого l oop. Сообщите о нашем списке Student
объектов до и после внесения изменений.
System.out.println( "students = " + students );
for ( Student student : students )
{
student.activate();
}
System.out.println( "students = " + students );
student = [Student {name = 'Alice' | active = false}, ученик {имя = 'Боб' | active = false}, ученик {имя = 'Кэрол' | active = true}]
студентов = [студент {имя = 'Алиса' | active = true}, ученик {имя = 'Боб' | active = true}, студент {имя = 'Кэрол' | active = true}]
Stream::forEach
l oop
L oop с потоком.
Мы написали метод activate
всегда переключите значение на TRUE
без аргумента. Таким образом, наша лямбда может использовать ссылку на метод , созданную с помощью синтаксиса двойного двоеточия ::
. С таким же успехом мы могли бы написать лямбду с аргументом Boolean
.
System.out.println( "students = " + students );
students.forEach( Student :: activate );
System.out.println( "students = " + students );
Тот же эффект.
student = [Student {name = 'Alice' | active = false}, Student {name = 'Bob' | active = false}, ученик {имя = 'Кэрол' | active = true}]
студентов = [студент {имя = 'Алиса' | active = true}, ученик {имя = 'Боб' | active = true}, студент {имя = 'Кэрол' | active = true}]