Как правильно фильтровать содержимое ArrayList? - PullRequest
0 голосов
/ 18 апреля 2019

Я работал над поиском лучшего способа фильтрации содержимого ArrayList

Например, у этой программы есть основной ArrayList под названием «Students», а затем я создал другие сублисты из содержимого этого списка (oldStudents, youngStudents, stupidStudents, smartStudents. Цель состоит в том, чтобы отфильтровать ArrayList на основе выбора пользователей (молодых, старых, умных или глупых)

    ArrayList<String> students = new ArrayList<String>(); 
    ArrayList<String> smartStudents = new ArrayList<String>(); 
    ArrayList<String> stupidStudents = new ArrayList<String>(); 
    ArrayList<String> oldStudents = new ArrayList<String>(); 
    ArrayList<String> youngStudents = new ArrayList<String>(); 


    //adding all the students to students list 
    Collections.addAll(students, "Ram", "Mohan", "Sohan", "Rabi", "Shabbir","Jack", "Johnson", "Peter", "Despina", "Me");
    //adding young students to youngStudents list 
    Collections.addAll(youngStudents, "Ram", "Mohan", "Sohan", "Rabi", "Shabbir");
    //adding smart students to oldStudents list 
    Collections.addAll(oldStudents, "Jack", "Johnson", "Peter", "Despina", "Me");
    //adding smart students to smartStudents list 
    Collections.addAll(smartStudents, "Sohan", "Rabi", "Peter", "Despina");
    //adding smart students to stupidStudents list 
    Collections.addAll(stupidStudents, "Ram", "Mohan", "Shabbir","Jack", "Johnson", "Me");

    Scanner input = new Scanner(System.in);
    String uInput = "";



    System.out.print("This is a students search engine, write 'young' for younger students and 'old' for older ones ");
    uInput = input.nextLine();

    if(uInput.equals("young")) {

        students.removeAll(oldStudents); 

    } else if (uInput.equals("old")) {

        students.removeAll(youngStudents);

    }


    System.out.print("now write 'Smart' for smarter students and 'Stupid' for less smart students ");
    uInput = input.nextLine();

  if(uInput.equals("smart")) {

        students.removeAll(stupidStudents); 

    } else if (uInput.equals("Stupid")) {

        students.removeAll(smartStudents);

    }


  System.out.println(students);

Это работает, но я считаю, что есть лучший способчтобы достичь этого

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Вы можете использовать этот подход:

class Student { String name; boolean old; boolean stupid; }

List<Student> students = initializeListOfStudents();

// alter these flags accordingly to your needs
Boolean old = null;
Boolean stupid = true;

// then do the filter
List<Student> allStupids = students.stream()
    .filter(it -> (old==null || it.old == old) && (stupid==null || it.stupid==stupid))
    .collect(Collectors.toList());
0 голосов
/ 18 апреля 2019

В Java 8 вы можете использовать Stream для фильтрации списка.В этой ссылке вы можете найти различные примеры:

https://www.baeldung.com/java-stream-filter-lambda

0 голосов
/ 18 апреля 2019

Java - это объектно-ориентированный язык. Используйте это.

Создайте класс Student с 3 полями: String name, boolean old и boolean smart. Добавить методы получения.

Теперь вы можете легко фильтровать, например,

// New list with dumb students
dumpStudents = studentList.stream().filter(s -> ! s.isSmart()).collect(Collectors.toList());

// Remove old people from list
studentList.removeIf(Student::isOld);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...