在不同情况下对JSONObjects列表进行排序

时间:2020-05-19 16:15:47

标签: java json sorting

我有一个JSONObjects列表,

[{"id":"aaa", "value":"-1"}, {"id":"bbb", "value":"10"}, {"id":"ccc", "value":"20"}, {"id":"ddd", "value":"-"}, {"id":"eee", "value":"-10"}]

我必须基于每个JSONObject的值(以升序和降序)对该列表进行排序。但是,无论是升序还是降序,都应始终显示具有“-”的值。 在另一种情况下,我们应仅显示正值,而将负值视为“-”。 如何以最好的方式一起处理这两种情况?

1 个答案:

答案 0 :(得分:1)

这是使用Jackson来实现的方法:

String str = "[{\"id\":\"aaa\", \"value\":\"-1\"}, {\"id\":\"bbb\", \"value\":\"10\"}, {\"id\":\"ccc\", \"value\":\"20\"}, {\"id\":\"ddd\", \"value\":\"-\"}, {\"id\":\"eee\", \"value\":\"-10\"}]";
ObjectMapper om = new ObjectMapper();
List<SomeClass> list = om.readValue(str, new TypeReference<List<SomeClass>>() {});
list.sort(Comparator.comparingInt(o -> {
    try {return Integer.parseInt(o.getValue());}
    catch (NumberFormatException e) {return Integer.MAX_VALUE;}
}));
System.out.println(list);

要更改比较器的方向,请在.reversed()上调用Comparator。例如Comparator.comparingInt(...).reversed()