Поиск значения во вложенной карте в Java8 - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь просмотреть вложенную карту для конкретного значения, используя java8.Пример: карта представляет собой

Map<Integer, Map<String,String>> classStudentGrp;

, а некоторые записи имеют вид

StudentId1:
StudentName:Andy
StudentAge:12
StudentAddress:xxxx

StudentId1:
StudentName:Anna
StudentAge:11
StudentAddress:yyyy

и т. Д.

Я смотрю на что-то вроде

classStudentGrp.forEach((sid,stu)->stu.forEach((sAttr,val)->val.equals("Andy")));

и я хочу либо вернуть логическое значение (true), либо установить переменную, если найден 'Andy'.Я знаю традиционный подход, использующий ключи ввода и значения, но пытаюсь сделать это в лямбде.

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Я настоятельно рекомендую вам создать класс Student вместо простого String в формате:

StudentId1:
StudentName:Andy
StudentAge:12
StudentAddress:xxxx

Java - это объектно-ориентированный язык, и лучше всего использовать его как таковой,Вы можете создать класс как:

class Student {
   private String name;
   private String id;
   private int age;
   private String address;  
   //Getters and setters
   //Appropriate constructors
}

Тогда вы можете сделать:

boolean value = classStudentGrp.values().stream()
                                        .anyMatch(e -> e.getName().equals("Andy"));

, который будет принимать Stream значений classStudentGrp (Map<String, Student)возьмите значения этого Map (A Stream<Students>) и затем используйте anyMatch, чтобы определить, имеет ли какой-либо из Students имя «Энди»

1 голос
/ 31 мая 2019

Вы можете проверить это с помощью:

boolean contains = classStudentGrp.values().stream()
        .anyMatch(m -> m.containsValue("Andy"));

Но вы должны использовать объект Student, как этот:

public class Student {
    private String name;
    private int age;
    // ...
}

С List<Student> вы можете использовать только это:

boolean contains = classStudentGrp.stream().anyMatch(s -> "Andy".equals(s.getName()))
0 голосов
/ 31 мая 2019

см. Пример ниже

List<String> result = lines.stream()                // convert list to stream
  .filter(line -> "mkyong".equals(line))            // we dont like mkyong
  .collect(Collectors.toList()); 

от https://www.mkyong.com/java8/java-8-streams-filter-examples/

...