当前位置: 首页 > 知识库问答 >
问题:

要用排序顺序映射的Java列表[重复]

令狐昌胤
2023-03-14
public class Country {
    private String countryCode;
    private String countryName;

    
    public Country(String countryCode, String countryName) {
        super();
        this.countryCode = countryCode;
        this.countryName = countryName;
    }

    public String getCountryCode() {
        return countryCode;
    }

    public void setCountryCode(String countryCode) {
        this.countryCode = countryCode;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    @Override
    public String toString() {
        return "Country [countryCode=" + countryCode + ", countryName=" + countryName + "]";
    }

}

逻辑


public class Java8_2_ListToMap {
    public static void main(String[] args) {
        
        Map<String, String>  countryMaps1 = getSortedCountryMap(getCountryLists());
        countryMaps1.forEach((k, v) -> System.out.println("Key is " + k + " Value is " + v));

    }

    private static List<Country> getCountryLists() {
        return Arrays.asList(new Country("IN", "India"), new Country("US", "United States"),
                new Country("GR", "Germany"), new Country("UK", "United Kingdom"));
    }



    private static Map<String, String> getSortedCountryMap(List<Country> countryLists) {
        
        
        Map<String, String> countryMap  = countryLists.stream()
                .sorted(Comparator.comparing(Country::getCountryCode))
                .collect(Collectors.toMap(Country::getCountryCode, Country::getCountryName));
        return countryMap;
    }
}

输出为

Key is IN Value is India
Key is UK Value is United Kingdom
Key is GR Value is Germany
Key is US Value is United States

共有1个答案

傅长恨
2023-03-14

默认情况下,collectors.tomap创建一个HashMap,该HashMap没有排序。有多个map实现,它们是有序的,可能适合您的用例。

例如,您可以选择使用treemap,它自动按自然顺序或按您选择的比较器对其键进行排序。

另一个选项是LinkedHashMap,它会记住键的插入顺序。

// TreeMap
Map<String, String> countryMap  = countryLists.stream()
        .sorted(Comparator.comparing(Country::getCountryCode))
        .collect(Collectors.toMap(Country::getCountryCode,Country::getCountryName, String::join, TreeMap::new));

// LinkedHashMap
Map<String, String> countryMap  = countryLists.stream()
        .sorted(Comparator.comparing(Country::getCountryCode))
        .collect(Collectors.toMap(Country::getCountryCode,Country::getCountryName, String::join, LinkedHashMap::new));
 类似资料:
  • 我有一个类型的变量,其中item如下所示: 我想将其重新排序为,其中键是customerId,然后值是具有该客户ID的所有项的列表。

  • 我有一个对象列表,需要根据特定的顺序排序。如下代码所示: 这也是当它得到排序,只有名称(“宝马”,“奥迪”,“奔驰”)的位置正在改变。我在汽车课上还有一个字段,那就是数量。数量将处于相同位置。这个职位也应该随着名字而改变。 我希望输出为,但实际输出为

  • 我想使用Java流按对用户列表进行分组。 例如,我有。

  • 问题内容: 我有以下查询,该查询基于逗号分隔的列表返回行 我希望此查询的结果以ID在列表中的顺序返回。SQL可以做到吗? 提前致谢 问题答案: 如果您需要输出以特定顺序显示,则需要使用服务器可以排序的内容来指定该顺序。不知道您要使用哪个引擎,一般的方案是创建一个临时表或使用行集构造函数将每个记录ID与所需的排序顺序配对。 例如(SQL Server)

  • 问题内容: 我有地图,我想要一个列表,其中按其对应的值对键(最小到最大)进行了排序。我的尝试是: 但这只是给我一个条目列表,如何在不丢失顺序的情况下获得类型列表? 问题答案: 您说要按值排序,但是您的代码中没有。传递一个lambda(或方法引用)来告诉它您想如何排序。 而您想获得钥匙;用于将条目转换为键。

  • 我正在使用Java8lambda,并希望使用返回。我所能想到的最好方法是使用等于的虚拟和调用以下