排序列表<map <string,object =“”>&gt;通过地图中的特定键

时间:2018-04-04 07:10:47

标签: java json list arraylist hashmap

我有一个List,其内容是带有字符串键的Map,如果是String或Long,则是值。

[{
  "name": "Abc",
  "id": 1522047548000
},
{
  "name": "Xyz",
  "id": 1522048221000
}]

如何对列表进行排序

  1. 基于长期的身份
  2. 基于名称为String

2 个答案:

答案 0 :(得分:1)

从JAVA 1.8开始,java.util.Comparator中有一个名为comparison的新方法。 它返回比较器按给定键比较对象。 https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function-

在这种情况下,按名称进行比较,它看起来像:

 list.sort(Comparator.comparing(o -> String.valueOf(o.get("name"))));

并按ID进行比较:

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

答案 1 :(得分:0)

使用Java 8,您可以使用以下内容:

list.stream()
.sorted((a, b) -> a.get("id").compareTo(b.get("id"))
   .thenComparing(a.get("name").compareTo(b.get("name")));

结果是另一个流,您可以将其收集到另一个列表中。这不会改变原始列表(可能有用也可能没用)。

(我是Java新手,过去几年曾经使用过C#,所以我可能错过了一些东西......)