我有一个JSONObjects列表,
[{"id":"aaa", "value":"-1"}, {"id":"bbb", "value":"10"}, {"id":"ccc", "value":"20"}, {"id":"ddd", "value":"-"}, {"id":"eee", "value":"-10"}]
我必须基于每个JSONObject的值(以升序和降序)对该列表进行排序。但是,无论是升序还是降序,都应始终显示具有“-”的值。 在另一种情况下,我们应仅显示正值,而将负值视为“-”。 如何以最好的方式一起处理这两种情况?
答案 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()
。