Сортировка hashmap по значениям

RedDeveloper
07.01.2023 10:34
Сортировка hashmap по значениям

На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.

В результате я погуглил, как отсортировать hashmap по значениям, но не смог понять ни одного из них, потому что не знал о

  1. Компараторы в JAVA

В Java компаратор - это объект, который можно использовать для сравнения двух объектов класса, чтобы определить их порядок относительно друг друга. Он используется для обеспечения упорядочения коллекций объектов, которые не имеют естественного упорядочения, или для обеспечения определенного упорядочения объектов класса, который имеет естественное упорядочение, но не то, которое вам нужно.

Чтобы использовать компаратор, вы определяете класс, реализующий интерфейс java.util.Comparator, и переопределяете его метод compare. Этот метод принимает на вход два объекта и возвращает значение int, которое показывает, меньше, равен или больше первый объект, чем второй. Затем вы можете использовать этот компаратор для сортировки коллекции объектов

import java.util.*;
public class Test {

 public static void main(String[] args) {
  
   test();

 }
 
 public static void test() {
  
  HashMap<String, Integer> mp = new HashMap<>();
  mp.put("adam", 90);
  mp.put("chris", 80);
  mp.put("Zan", 100);
  System.out.println(mp);
  
  
  List<Map.Entry<String,Integer>> list = new ArrayList<>(mp.entrySet());
  System.out.println(list);


  
  // ******** Sorting Using Comparator ********

  Collections.sort(list, new Comparator<Map.Entry<String, Integer>>(){
    public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2)
      {
       return (o1.getValue()).compareTo(o2.getValue());
      // return (o1.getKey()).compareTo(o2.getKey()); to sort by keys
      }
  }); 

  
  
  LinkedHashMap<String,Integer> sortmp = new LinkedHashMap<>(); 
  
  for(Map.Entry<String,Integer> k : list ) {
   
   sortmp.put(k.getKey(), k.getValue());  
  }  
  
  
  System.out.println(list);
  System.out.println(sortmp);
 }

}

Выход

{Адам=90, Крис=80, Зан=100}

[adam=90, chris=80, Zan=100]

[chris=80, adam=90, Zan=100]

{Крис=80, Адам=90, Зан=100}

2. Лямбда-выражение в JAVA

В Java лямбда-выражение - это способ создания экземпляра функционального интерфейса (интерфейса с одним абстрактным методом) путем написания простой, краткой функции вместо анонимного внутреннего класса. Лямбда-выражения можно использовать для передачи функции в качестве аргумента методу или для определения реализации метода интерфейса inline.

В Java лямбда-выражение - это способ создания экземпляра функционального интерфейсаВ Java лямбда-выражение - это способ создания экземпляра функционального интерфейса

3. Потоковый API в JAVA

Java Stream API - это набор классов и интерфейсов в языке программирования Java, который позволяет выполнять операции над последовательностью элементов, такие как фильтрация, сопоставление и сокращение, в декларативной форме. Он является частью пакета java.util.stream, который был добавлен в Java 8.

Вот пример того, как можно использовать Stream API для фильтрации списка целых чисел, удвоения значений оставшихся элементов, а затем суммирования полученных значений:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n * 2)
                 .sum();
System.out.println(sum);

Выходным результатом этого кода будет 12, потому что он отфильтровывает нечетные числа (1, 3 и 5), удваивает оставшиеся числа (2 и 4), а затем суммирует получившиеся числа (4 и 8).

Выходным результатом этого кода будет 12 потому что он отфильтровывает нечетные числа (1Выходным результатом этого кода будет 12 потому что он отфильтровывает нечетные числа (1

Для лучшего понимания вы можете посетить приведенные ниже ссылки youtube, где все ваши сомнения будут развеяны

  1. Сортировка с использованием компаратора, лямбда-выражения и StreamAPI

2. учебник по лямбда-выражению в java

Я надеюсь, что вы узнаете что-то новое из этого... Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.