Java 排序列表<;地图<;字符串,对象>&燃气轮机;通过地图中的特定键

Java 排序列表<;地图<;字符串,对象>&燃气轮机;通过地图中的特定键,java,json,list,arraylist,hashmap,Java,Json,List,Arraylist,Hashmap,我有一个列表,其内容是映射字符串键和值(如果键入string或Long) [{ "name": "Abc", "id": 1522047548000 }, { "name": "Xyz", "id": 1522048221000 }] 我如何对列表进行排序 基于长的id 基于字符串的名称 使用Java 8,可以实现如下功能: list.stream() .sorted((a, b) -> a.get("id").compareTo(b.get("id")) .the

我有一个列表,其内容是映射字符串键和值(如果键入string或Long)

[{
  "name": "Abc",
  "id": 1522047548000
},
{
  "name": "Xyz",
  "id": 1522048221000
}]
我如何对列表进行排序

  • 基于长的id
  • 基于字符串的名称

  • 使用Java 8,可以实现如下功能:

    list.stream()
    .sorted((a, b) -> a.get("id").compareTo(b.get("id"))
       .thenComparing(a.get("name").compareTo(b.get("name")));
    
    结果是另一个流,您可以将其收集到另一个列表中。这不会更改原始列表(可能有用,也可能无用)


    (我是Java新手,过去几年一直使用C,所以我可能错过了一些东西…

    使用Java 8,您可以这样做:

    list.stream()
    .sorted((a, b) -> a.get("id").compareTo(b.get("id"))
       .thenComparing(a.get("name").compareTo(b.get("name")));
    
    结果是另一个流,您可以将其收集到另一个列表中。这不会更改原始列表(可能有用,也可能无用)


    (我是Java新手,过去几年一直使用C语言,所以我可能错过了一些东西…

    自从Java 1.8以来,Java.util.Comparator中有一种称为比较的新方法。 它返回比较器,通过给定的键比较对象。

    在本例中,要按名称进行比较,如下所示:

     list.sort(Comparator.comparing(o -> String.valueOf(o.get("name"))));
    
    并通过id进行比较:

     list.sort(Comparator.comparing(o -> (Long) o.get("id")));
    

    自Java1.8以来,在JAVA.util.Comparator中有一种称为比较的新方法。 它返回比较器,通过给定的键比较对象。

    在本例中,要按名称进行比较,如下所示:

     list.sort(Comparator.comparing(o -> String.valueOf(o.get("name"))));
    
    并通过id进行比较:

     list.sort(Comparator.comparing(o -> (Long) o.get("id")));
    

    把你的问题重新表述一下,我不明白
    {name,id}
    是值吗?什么是键?@anat0lius键始终是字符串类型,但name的value是字符串类型,id的long类型。我想根据id进行排序。我不明白你的问题
    {name,id}
    是值吗?什么是键?@anat0lius键始终是字符串类型,但name的值是字符串类型,id的值是long类型。我想根据idI进行排序,我猜使用第二个比较器排序会破坏第一个比较器的排序。是吗?@StefanSteinegger是的,我想问题是如何分别处理每个案件。Id的字段永远不应该相等。事实上,问题还不清楚。我想用第二个比较器排序会破坏第一个比较器的排序。是吗?@StefanSteinegger是的,我想问题是如何分别处理每个案件。Id的字段永远不应该相等。事实上,这个问题并不清楚。