我有两个Hashmaps Map1<List,List>
和Map2<List,List>
,Key List包含两个地图的两个元素 - String name and time
。
我想迭代Map1并检查map1的键是否包含在map 2中,但由于我的键有2个元素,我只想基于时间进行比较。
for (Entry<List, List> entry : Map1.entrySet()) {
if("Map2.contains(entry.getKey().get(1))"){
}
}
example: Map1 ,Key1: student1, 14:30:20(time of entering class)
Map1 ,Key2: student1, 14:30:12
Map2 ,Key1: student2, 14:30:13
Map2 ,Key2: student2, 14:30:20
注意:这只是一个例子:我想看看student1和student2是否同时进入课堂。 在此示例中,第一行和最后一行匹配应返回true
这可能吗?如果是的话,那条件应该是什么条件?
答案 0 :(得分:1)
由于目前还不清楚你真正想要什么,这里有一些建议:
为包含所有数据字段的“学生”创建一个班级(注意:您可以time
使用public class Student {
private LocalTime time;
private String name;
public Student(LocalTime time, String name) {
this.time = time;
this.name = name;
}
public LocalTime getTime() {
return time;
}
public String getName() {
return name;
}
//TODO add the other fields
}
)
List<Student>
当您需要不仅通过时间访问学生时,只需将其存储在public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student(LocalTime.parse("14:30:12"),"s1"),
new Student(LocalTime.parse("14:30:12"),"s2"),
new Student(LocalTime.parse("14:30:13"),"s3"));
Map<LocalTime,List<Student>> groupByTime = students.stream()
.collect(Collectors.groupingBy(Student::getTime));
// print the grouped students to System.out
for(Entry<LocalTime,List<Student>> entry : groupByTime.entrySet()) {
System.out.println(entry.getKey());
for(Student student : entry.getValue()) {
System.out.println("\t"+student.getName());
}
}
}
中即可。 (因为你写了“我有一个我正在迭代的文件,它没有任何独特的元素”)
如果需要对对象进行分组,可以使用Java8-Stream-API。例如:
public static void main(String[] args) {
List<Student> students1 = Arrays.asList(
new Student(LocalTime.parse("14:30:20"),"s1"),
new Student(LocalTime.parse("14:30:12"),"s1"));
List<Student> students2 = Arrays.asList(
new Student(LocalTime.parse("14:30:13"),"s2"),
new Student(LocalTime.parse("14:30:20"),"s2"));
Map<LocalTime,List<Student>> groupByTime = Stream.concat(students1.stream(), students2.stream())
.collect(Collectors.groupingBy(Student::getTime));
for(Entry<LocalTime,List<Student>> entry : groupByTime.entrySet()) {
System.out.println(entry.getKey());
for(Student student : entry.getValue()) {
System.out.println("\t"+student.getName());
}
}
}
如果您有两个没有任何重复条目的列表,您可以简单地连接它们然后分组:
max
答案 1 :(得分:0)
这将是您的条件声明
if(map2.containsKey(entry.getKey().get(1)){
}
你的病情错了所以我纠正了。