J'essaie de parcourir une carte imbriquée pour une valeur spécifique en utilisant java8. Exemple: La carte est un
classStudentGrp.forEach((sid,stu)->stu.forEach((sAttr,val)->val.equals("Andy")));
et certains des enregistrements sont comme
StudentId1: StudentName:Andy StudentAge:12 StudentAddress:xxxx StudentId1: StudentName:Anna StudentAge:11 StudentAddress:yyyy
et ainsi de suite.
Je suis en regardant quelque chose comme
Map<Integer, Map<String,String>> classStudentGrp;
et je veux soit retourner un booléen (vrai), soit définir une variable si 'Andy' est trouvé. Je connais l'approche traditionnelle utilisant des clés d'entrée et des valeurs, mais j'essaie de le faire en lambda.
3 Réponses :
reportez-vous à l'exemple ci-dessous
List<String> result = lines.stream() // convert list to stream .filter(line -> "mkyong".equals(line)) // we dont like mkyong .collect(Collectors.toList());
provenant de https://www.mkyong.com/java8/java-8-streams-filter-examples/
Je vous recommande fortement de créer une classe Student au lieu d'avoir simplement une String au format:
boolean value = classStudentGrp.values().stream()
.anyMatch(e -> e.getName().equals("Andy"));
Java est un objet Langage orienté, et il est préférable de l'utiliser comme tel. Vous pouvez créer une classe comme:
class Student {
private String name;
private String id;
private int age;
private String address;
//Getters and setters
//Appropriate constructors
}
Ensuite, vous pouvez faire:
StudentId1: StudentName:Andy StudentAge:12 StudentAddress:xxxx
Ce qui prendra un flux des valeurs de classStudentGrp (La Map Map (A Diffusez ), puis utilisez anyMatch pour déterminer si l'un des étudiants porte le nom «Andy»
Vous pouvez le tester avec ceci:
boolean contains = classStudentGrp.stream().anyMatch(s -> "Andy".equals(s.getName()))
Mais vous devriez utiliser un objet Student comme celui-ci:
public class Student {
private String name;
private int age;
// ...
}
Avec un Listez que vous pouvez utiliser simplement ceci:
boolean contains = classStudentGrp.values().stream()
.anyMatch(m -> m.containsValue("Andy"));
Je recommanderais d'utiliser un objet
Studentau lieu d'une carte imbriquée.