Найти числа, которые начинаются с данного числа на карте в Java - PullRequest
0 голосов
/ 29 июня 2018

Я бы хотел посчитать все ключи в HashMap, которые начинаются с данного числа. Размер каждой клавиши не всегда одинаков. Пример:

данный номер (длинный):

long l = 9988776655

найдите ключи (длинные), которые начинаются с этого числа, например:

9988776655xxxxxxxxxxxxxxx

, где x обозначает любое целое число.

Как мне подойти к этой проблеме? Поскольку длина клавиш не всегда одинакова, я не могу сделать это с несколькими операциями по модулю. (или я могу?)

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Попробуйте преобразовать длинный l и ключи в строки. Затем сравните начало строк. Как то так:

long l = 1234L;
Map<Long, Object> hashMap = new HashMap<>();
hashMap.put(1234567L, 1);
hashMap.put(1334567L, 2);
String longString = ""+l;
for(Map.Entry entry: hashMap.entrySet()) {
   String keyString = ""+entry.getKey();
    if(keyString.startsWith(longString)) {
        System.out.println(entry.getValue());
    }
}
0 голосов
/ 29 июня 2018

Вы можете реализовать общий метод, например так:

public static int numberOfStartsWith(Map mp, String start) {
    int count = 0;
    for (String key : map.keySet()) {
        if (key.startsWith(start) count++;
    }
    return count;
}

и перегрузите его так:

public static int numberOfStartsWith(Map mp, int start) {
    return MyClass.numberOfStartsWith(mp, String.valueOf(start));
}

и

public static int numberOfStartsWith(Map mp, long start) {
    return MyClass.numberOfStartsWith(mp, String.valueOf(start));
}
0 голосов
/ 29 июня 2018

Я бы просто преобразовал ключи в строки:

public static long keysStartingWith(Map<Long, ?> map, long toSearch) {
    String searchStr = String.valueOf(toSearch);
    return map.keySet().stream().filter(k -> k.toString().startsWith(searchStr)).count();
}
...