在 Java 中建立有序對映

Rashmi Patidar 2023年1月30日 2021年10月2日
  1. 使用 Java 中的 TreeMap 類對對映進行排序
  2. 使用 Java 8 函式建立對映排序
在 Java 中建立有序對映

對映是 Java 中儲存鍵值對的資料結構。對映是存在於 Collection 層次結構中的 interface。這些鍵是唯一的,因此不允許重複鍵;但是,對映到鍵的變數可以有重複的值。HashMapLinkedHashMapTreeMap 等類實現了 Map 介面。

使用 Java 中的 TreeMap 類對對映進行排序

下面,該程式演示了 Java 程式中的對映排序。

import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> map = new TreeMap<String, Integer>();
        map.put("Third", 1);
        map.put("First", 2);
        map.put("Second", 3);

        for (String key: map.keySet()) {
            System.out.println(key + " ,ID = "+ map.get(key) );
        }
    }
}

TreeMap 類按升序對對映值進行排序。它還在內部實現了 SortedMap 介面,因此使用 new 關鍵字建立對映例項。

樹圖中的資料型別在例項化時指定。Map 鍵是 String 型別,它的值是 Integer 型別。

put 函式在樹圖中插入鍵值對。現在,定義了一個 for-each 迴圈來遍歷對映。在 Java 中,無法直接迭代對映。因此,對映的鍵最初被轉換為 Set 例項。

map.keySet 函式返回對映中存在的鍵的 Set。此函式位於 TreeMap 類中,並返回當前鍵的有序檢視。get 函式獲取與鍵對應的值。

下面是按升序排列的輸出。

First ,ID = 2
Second ,ID = 3
Third ,ID = 1

使用 Java 8 函式建立對映排序

Java 8 提供對函數語言程式設計的支援,允許使用者在函式鏈上工作。

Streamsjava.util 包中的一個介面,它可以輕鬆地在單個語句中處理順序操作。Streams 函式在發射器發射資料的管道中工作;它會根據使用者的需求進行過濾、處理、轉換等等。

package F09;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.AbstractMap.SimpleEntry;

public class MapOrdering {
    public static void main(String[] args) {
        Map<String, String> mapSortedByKey = Stream.of(
                new SimpleEntry<>("key3", "value1"),
                new SimpleEntry<>("key1", "value2"),
                new SimpleEntry<>("key2", "value3"))
                .sorted(Map.Entry.comparingByKey())
                .collect(Collectors.toMap(Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldVal, newValue) -> oldVal,
                        LinkedHashMap::new));

        System.out.println();
        System.out.print("Ordered List: ");
        for (String s1 : mapSortedByKey.keySet()) {
            System.out.print(" " + s1);
        }
    }
}

Stream 介面提供各種函式,並在不同的類中實現它以處理它們。在這裡,鍵值對流是使用 new SimpleEntry 類形成的。這些值被插入到 of 函式中以形成一個流。

在鏈系列中,sorted 函式被呼叫。該函式採用 Comparator 例項,根據定義的順序按順序排列鍵。函式 comparingByKey 返回按自然升序比較鍵的比較器。

sorted 函式最終返回按升序排列的值流。Stream 類的 collect 函式在新的 LinkedHashMap 例項中收集給定的對映值。該類保留所提供序列的插入順序。該函式將 Collector 例項作為引數。

第一個引數是建立新容器的供應商 toMap 函式。第二個引數是累積值的 BiConsumer,最後一個引數是充當合併結果的組合器的 BiConsumer。因此,LinkedHashMap::new 命令組合結果並返回形成的例項。

mapSortedByKey 例項現在包含使用上面的 for-each 迴圈迭代的順序對映元素。結果對映鍵列印在下面的標準輸出中。

Ordered List:  key1 key2 key3
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

相關文章 - Java Map

相關文章 - Java Sort