Как отсортировать HashMap по убывания количества повторений, то есть по Integer ? Если у кого-то есть реализация, буду очень благодарен)
String string = "101010001010101010";
int rate = 8;//8,16,24
HashMap<String, Integer> hashMap = new HashMap<>();
int counter = 0;
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
counter++;
buffer.append(string.charAt(i));
if (counter == rate) {
counter = 0;
Integer frequency = hashMap.get(buffer.toString());
hashMap.put(buffer.toString(), frequency == null ? 1 : frequency + 1);
buffer = new StringBuilder();
}
}
System.out.println("????? ????????? ?????? - "+ rate + " ?????:: ");
String[] arrayKey = hashMap.keySet().toArray(new String[0]);
for (int k = 0; k < arrayKey.length; k++)
{
System.out.println( arrayKey[k] + " - " + hashMap.get(arrayKey[k]));
}
Отсортировать записи из Map
по значениям можно следующим образом, используя Java 8 Stream API:
List<Map.Entry<String, Integer>> list = map.entrySet().stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.collect(Collectors.toList());
Если нужна сортировка в обратном порядке - чуть-чуть добавится кода:
List<Map.Entry<String, Integer>> list = map.entrySet().stream()
.sorted(Comparator.<Map.Entry<String, Integer>, Integer>
comparing(Map.Entry::getValue).reversed())
.collect(Collectors.toList());
Здесь записи сохраняются в список как есть, однако можно их вывести, оставить только ключи/значения или что-нибудь ещё, по необходимости.
Может так?
String[] arrayKey = hashMap.keySet().toArray(new String[0]);
Integer arr[] = new Integer[arrayKey.length];
for (int k = 0; k < arrayKey.length; k++) {
Log.i("log__1", " arrayKey[k] - hashMap.get(buffer.toString()) - " + arrayKey[k] + " - " + hashMap.get(arrayKey[k]));
arr[k] = hashMap.get(arrayKey[k]);
}
Arrays.sort(arr, Collections.reverseOrder());
for(int i = 0; i < arr.length; i++) {
Log.i("log__1", arr[i] + " ");
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый деньСуть задачи такова: ввожу N элементов, они отображаются в виде кольца (именно кольцом)
Пытаюсь запустить rmi сервер с политикой:
Нужно сымитировать нажатие клавишиНе ввод по средствам SendKeys, а именно открыть страницу и сымитировать нажатие кнопки на клавиатуре
Прямоугольная область задана координатами x1 y1, x2 y2 концов ее диагоналиОбласть разбита на прямоугольники так, что одна сторона разбита на n, а другая...