Skip to content
Advertisement

Returning they key with lowest value in a nested hashmap

I have this hashmap:

{count : {req : deadline}, count : {req : deadline}, count : {req : deadline}, count : {req : deadline}}

If I put it in values is:
{0 : {req : 5}, 1 : {req : 3}, 2 : {req : 1}, 3 : {req : 3}}

I want to compare all the deadline values and see which one has the lowest value and return the count that has that deadline.

So in this case the lowest “deadline” = 1, which corresponds to the “count” = 2.

Advertisement

Answer

You can use HashMap of type <Integer, DataHolder> and then sort the map based on values and access the first element.

See below code

public class Sample {

    static class Data {
        String key;
        Integer value;

        public Data(String key, Integer value) {
            this.key = key;
            this.value = value;
        }

        @Override
        public String toString() {
            return "Data{" +
                    "key='" + key + ''' +
                    ", value=" + value +
                    '}';
        }
    }

    public static void main(String[] args) throws InterruptedException, IOException {
        Map<Integer, Data> map = new HashMap<>();
        map.put(0, new Data("req", 5));
        map.put(1, new Data("req", 3));
        map.put(2, new Data("req", 1));
        map.put(3, new Data("req", 3));

        List<Map.Entry<Integer, Data>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, Comparator.comparing(o -> o.getValue().value));
        System.out.println(list.stream().findFirst().get().getKey());
    }
}
Advertisement