[英]Searching a value in a nested Map in Java8
我正在尝试使用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')。 我知道使用输入键和值的传统方法,但是尝试在lambda中做到这一点。
我强烈建议您创建一个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
有名为“安迪”
您可以使用以下方法进行测试:
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()))
参考下面的例子
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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.