есть ли какая-либо функция для установки значения для полного списка в java - PullRequest
1 голос
/ 13 января 2020

Как добавить каждое значение свойства в моей модели, используя List? Вот что я делаю

вот мой объект: Студент. java

public class Student {

private String userName;

private String firstName;

private boolean isActive;

// skip the getter setter
}

Я звоню в БД, чтобы получить список студентов, и хочу установить активный флаг для все пользователи могут иметь значение true или false в зависимости от условий

Мои фиктивные данные будут выглядеть примерно так:

Student studentList = new Student();
Student student1 = new Student();
student1.setUserName("skol");
student1.setFirstName("soumya");
studentList.add(student1);
Student student2 = new Student();
student1.setUserName("vrac");
student1.setFirstName("vivek");
studentList.add(student2);

Так что теперь без итерации я хочу установить для всех флагов isActive значение true, это возможно в java?

сейчас я делаю что-то вроде

 studentList.parallelStream.forEach(stu -> {
 stu.setIsActive(true);
 }
 )

Ответы [ 3 ]

3 голосов
/ 13 января 2020

Вы должны выполнить итерацию, так или иначе

Так что теперь без итерации я хочу установить для всех флагов 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}]

1 голос
/ 13 января 2020

CASE # 1 (с итерацией) : вам не нужен поток для установки isActive в этом случае. цикл по списку и установка isActive в true должны решить проблему.

 studentList.forEach(stu -> {
   stu.setIsActive(true);
 }

ParallelStreams может снизить производительность, если список студентов невелик

CASE # 2 (без итерации) : Как уже упоминалось выше, набор ответов isActive = true по умолчанию

0 голосов
/ 13 января 2020

В вашей модели попробуйте установить значение по умолчанию в true, как показано ниже, пожалуйста, дайте мне знать, если это работает -

private boolean isActive = true;
...