在 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