有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

hashmap如何在Java中按键排序?

我有以下格式的日期:

Key        Value 
13:00:08 : 3
13:00:08 : 2
13:00:08 : 2
13:00:06 : 2
13:00:08 : 2
13:00:09 : 1
13:00:07 : 2
13:00:09 : 3

我把时间戳转换成秒。然后根据时间戳,我必须对数据进行排序

我尝试使用TreeMap,但它会删除重复项。我试过HashMap,但它删除了重复项MultiMap在这里不起作用

我试过的代码是:

Map<Integer, Integer> map = new TreeMap<Integer, Integer>(tmap);
        System.out.println("After Sorting:");
        Set set2 = map.entrySet();
        Iterator iterator2 = set2.iterator();
        while(iterator2.hasNext()) {
            Map.Entry me2 = (Map.Entry)iterator2.next();
            System.out.print(me2.getKey() + ": ");
            System.out.println(me2.getValue());
        }

我如何进行分拣


共 (2) 个答案

  1. # 1 楼答案

    因此,对于您发布的示例,实际的问题是在代码示例中创建tmap。这基本上只是分析数据

    Map<LocalTime, List<Integer>> result = new TreeMap<>();
    try (Scanner fileScanner = new Scanner(yourFile)) {
        while (fileScanner.hasNext()) {
            try (Scanner lineScanner = new lineScanner(fileScanner.nextLine())) {
                LocalTime time = DateTimeFormatter.ISO_LOCAL_TIME.parse(lineScanner.next());
                // skip the ":"
                lineScanner.next();
                int value = lineScanner.nextInt();
                // use the list for this time or create a new one if none is present
                List<Integer> valueList = result.computeIfAbsent(time, d -> new ArrayList<>());
                valueList.add(value);
            }
        }
    }
    
  2. # 2 楼答案

    听起来你只是想要一份清单

    将时间和值封装在一个对象中,并处理这些对象的列表。然后可以按时间对列表进行排序

    public class TimeValue {
        LocalTime time;
        int value;
    
        public TimeValue(LocalTime time, int value) {
            this.time = time;
            this.value = value;
        }
    
        public LocalTime getTime() {
            return time;
        }
    
        public static void main(String[] args) {
            List<TimeValue> timeValues = new ArrayList<>();
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 8), 3));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 8), 2));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 8), 2));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 6), 2));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 8), 2));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 9), 1));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 7), 2));
            timeValues.add(new TimeValue(LocalTime.of(13, 0, 9), 3));
    
            timeValues.sort(Comparator.comparing(TimeValue::getTime));
    
            System.out.println(timeValues);
        }
    
        @Override
        public String toString() {
            return this.time + ": " + this.value;
        }
    }
    

    之所以ListMap更可取,是因为在你的情况下,时间不是唯一的;因此,它不能用作密钥