JSONArray操作汇总
一、排序
1.根据集合对象中某一对象属性进行排序,返回新的集合
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
System.out.println("初始化的JSONArray:" + jsonArray.toJSONString());
JSONArray newJSONArray = jsonArray.stream().sorted(
Comparator.comparingLong(
// 根据对象中的ID进行排序
e -> JSONObject.parseObject(e.toString()).getLongValue("ID")
)
).collect(Collectors.toCollection(JSONArray::new));
System.out.println("排序后的newJSONArray:" + newJSONArray.toJSONString());
}
输出结果
初始化的JSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"2","NAME":"二"},{
"ID":"1","NAME":"一"}]
排序后的newJSONArray:[{
"ID":"1","NAME":"一"},{
"ID":"2","NAME":"二"},{
"ID":"3","NAME":"三"}]
2.List进行排序,返回新的List 注意:并没有改变原始list的顺序
public static void main(String[] args) {
List<Integer> integerList1 = new ArrayList<>();
integerList1.add(1);
integerList1.add(5);
integerList1.add(7);
List<Integer> integerList2 = new ArrayList<>();
integerList2.add(2);
integerList2.add(4);
integerList2.add(8);
integerList1.addAll(integerList2);
System.out.println("未排序的integerList1:" + integerList1);
List<Integer> integerList3 = integerList1.stream().sorted().collect(Collectors.toList());
System.out.println("升序排序integerList3:" + integerList3);
List<Integer> integerList4 = integerList1.stream().sorted(Comparator.comparingInt(Integer::intValue).reversed()).collect(Collectors.toList());
System.out.println("降序排序integerList4:" + integerList4);
// 如果list存放的是对象,可以根据对象的某一个属性排序
// List<User> listUser = new ArrayList<>();
// List<Integer> integerList5 = listUser.stream().sorted((x,y) -> x.getAge().compareTo(y.getAge)).collect(Collectors.toList());
// System.out.println("自定义排序integerList5:" + integerList5);
}
输出结果
未排序的integerList1:[1, 5, 7, 2, 4, 8]
升序排序integerList3:[1, 2, 4, 5, 7, 8]
降序排序integerList4:[8, 7, 5, 4, 2, 1]
二、筛选
1.获取集合对象中某一属性值
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
// 获取NAME属性
// 方法一 优点是可以对属性值进行操作
List<String> list = jsonArray.stream().map(obj -> {
JSONObject jsonObj = (JSONObject) obj;
return jsonObj.getString("NAME");
}).collect(Collectors.toList());
// 方法二 代码简洁
List<String> list = jsonArray.stream().map(e -> ((JSONObject) e).getString("NAME")).collect(Collectors.toList());
System.out.println("新的list:");
for (String l : list) {
System.out.println(l);
}
}
输出结果
初始化JSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"3","NAME":"三"},{
"ID":"2","NAME":"二"},{
"ID":"1","NAME":"一"}]
新的list:
三
三
二
一
2.获取集合对象中某一属性值并去重,返回Set集合
注意:是无序的
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
System.out.println("去重前的JSONArray:" + jsonArray.toJSONString());
// 根据NAME去重
Set<String> set = jsonArray.stream().map(obj -> {
JSONObject jsonObj = (JSONObject) obj;
return jsonObj.getString("NAME");
}).collect(Collectors.toSet());
System.out.println("去重后的set:");
for (String s : set) {
System.out.println(s);
}
}
输出结果
去重前的JSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"3","NAME":"三"},{
"ID":"2","NAME":"二"},{
"ID":"1","NAME":"一"}]
去重后的set:
一
三
二
3.筛选集合对象中某一属性值符合判断条件的对象
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
// 获取ID为"3"的对象
JSONArray newJSONArray = jsonArray.stream().filter(
item -> "3".equals(
JSONObject.parseObject(item.toString()).getString("ID")
)
).collect(Collectors.toCollection(JSONArray::new));
System.out.println("新的newJSONArray:" + newJSONArray.toJSONString());
}
输出结果
初始化JSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"3","NAME":"三"},{
"ID":"2","NAME":"二"},{
"ID":"1","NAME":"一"}]
新的newJSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"3","NAME":"三"}]
三、分组
1.根据集合对象中某一属性进行分组
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
// 根据ID进行分组 这里value目前好像只能用List<Object>接
Map<String, List<Object>> groupById = jsonArray.stream()
.collect(Collectors.groupingBy(item -> JSON.parseObject(item.toString()).getString("ID")));
System.out.println("JSONArray转map为:");
for (String key : groupById.keySet()) {
System.out.println("key:"+ key + ",value:" + groupById.get(key));
}
}
输出结果
初始化JSONArray:[{
"ID":"3","NAME":"三"},{
"ID":"3","NAME":"三"},{
"ID":"2","NAME":"二"},{
"ID":"1","NAME":"一"}]
JSONArray转map为:
key:1,value:[{
"ID":"1","NAME":"一"}]
key:2,value:[{
"ID":"2","NAME":"二"}]
key:3,value:[{
"ID":"3","NAME":"三"}, {
"ID":"3","NAME":"三"}]