在两张地图之间部分搜索

时间:2018-02-22 05:03:17

标签: java hashmap

我有两个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

这可能吗?如果是的话,那条件应该是什么条件?

2 个答案:

答案 0 :(得分:1)

由于目前还不清楚你真正想要什么,这里有一些建议:

  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>
  2. 当您需要不仅通过时间访问学生时,只需将其存储在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()); } } } 中即可。 (因为你写了“我有一个我正在迭代的文件,它没有任何独特的元素”

  3. 如果需要对对象进行分组,可以使用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());
            }
        }
    }
    
  4. 如果您有两个没有任何重复条目的列表,您可以简单地连接它们然后分组:

    max

答案 1 :(得分:0)

这将是您的条件声明

if(map2.containsKey(entry.getKey().get(1)){
}

你的病情错了所以我纠正了。