Получить список <String>и HashMapиспользуя потоки Java 8 - PullRequest
0 голосов
/ 26 февраля 2019

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

public class Division {
    String className;
    Map<String, Student> studentMap;
    // getters and setters      
}

и

public class Student {
    String fName;
    String lName;
    String id;
    // getters and setters
}

, и у меня есть экземпляры для этих классов, как показано ниже:

Student s1= new Student("Lisa", "xyz", "12");
Student s2= new Student("John", "klm", "13");
Student s3= new Student("Lisa", "xyz", "14");

Division d1= new Division();
Division d2= new Division();

Map<String, Student> studentMap1= new HashMap<>();
studentMap1.put("key1", s1);
studentMap1.put("key2", s2);

Map<String, Student> studentMap2= new HashMap<>();
studentMap2.put("key3", s3);


d1.setStudentMap(studentMap1);
d2.setStudentMap(studentMap2);

List<Division> dList= Arrays.asList(d1, d2);

Здесь обратите внимание, что ключи, которыемы используем в HashMap уникальны по всей БД.так что я могу написать что-то подобное в Java 7, чтобы получить все studentMap

  1. Получить всех студентов Map

    Map<String, Student> allstudentsMap= new HashMap<>();
    
    for(Division d: dList) {
    
        for(String key:d.getStudentMap().keySet()) {
            allstudentsMap.put(key, d.getStudentMap().get(key));
    
        }
    }
    
  2. Мне нужно такжеполучить список ключей для некоторого условия фильтра.например, получить список ключей для студентов с именем Лиза .Я могу получить список, используя приведенный выше HashMap, как показано ниже:

    List<String> filterList= new ArrayList<>();
    Student s;
    for(String key:allstudentsMap.keySet()) {
    
        s= allstudentsMap.get(key);
        if(s.getfName().equalsIgnoreCase("Lisa")) {
            filterList.add(key);
        }
    
    }
    

Мне нужна помощь, чтобы сделать то же самое, используя потоки Java 8.1. Получить карту всех студентов. 2. Получить список всех ключей для некоторого условия фильтра.

1 Ответ

0 голосов
/ 26 февраля 2019

Учитывая, что все ключи уникальны для , вы можете просто поместить каждую запись из нескольких карт в вашу окончательную карту как:

Map<String, Student> allStudentsMap = new HashMap<>();
dList.forEach(d -> d.getStudentMap().forEach(allStudentsMap::put));

и далее применить filter кentrySet и соберите соответствующие ключи:

List<String> filterList = allStudentsMap.entrySet().stream()
        .filter(e -> e.getValue().getfName().equalsIgnoreCase("Lisa"))
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...