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(
// 根据对象中的ID进行升序排序 小到大
Comparator.comparingLong(
e -> JSONObject.parseObject(e.toString()).getLongValue("ID")
)
// 放开下面的注释,使用reversed()方法,就是降序 大到小
// .reversed()
).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":"三"}]
四、操作集合对象中属性值
1.根据集合对象中某一特定属性条件,修改对象值
- JSONArray类型
/**
* 将年龄大于25岁的用户的年龄替换为30岁
* @param args
*/
public static void main(String[] args) {
JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"4\",\"NAME\":\"四\",\"age\":\"21\"},{\"ID\":\"3\",\"NAME\":\"三\",\"age\":\"36\"}," +
"{\"ID\":\"2\",\"NAME\":\"二\",\"age\":\"15\"},{\"ID\":\"1\",\"NAME\":\"一\",\"age\":\"42\"}]");
System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
jsonArray.stream()
.filter(
item ->
// 判断年龄是否大于25
JSONObject.parseObject(item.toString()).getIntValue("age") > 25
)
.forEach(
item ->
// 将年龄替换为30
((JSONObject) item).put("age", "30")
);
System.out.println("处理后的JSONArray:" + jsonArray.toJSONString());
}
输出结果
初始化JSONArray:[{"ID":"4","age":"21","NAME":"四"},{"ID":"3","age":"36","NAME":"三"},{"ID":"2","age":"15","NAME":"二"},{"ID":"1","age":"42","NAME":"一"}]
处理后的JSONArray:[{"ID":"4","age":"21","NAME":"四"},{"ID":"3","age":"30","NAME":"三"},{"ID":"2","age":"15","NAME":"二"},{"ID":"1","age":"30","NAME":"一"}]
- List集合类型
/**
* 将年龄大于25岁的用户的年龄替换为30岁
*
* @param args
*/
public static void main(String[] args) {
List<User> listUser = new ArrayList<>();
User user1 = new User();
user1.setId(1);
user1.setAge(30);
user1.setName("一");
listUser.add(user1);
User user2 = new User();
user2.setId(2);
user2.setAge(15);
user2.setName("二");
listUser.add(user2);
User user3 = new User();
user3.setId(3);
user3.setAge(42);
user3.setName("三");
listUser.add(user3);
// 将年龄大于25岁的用户的年龄替换为30岁
listUser.stream().filter(user -> user.getAge() > 25).forEach(user -> user.setAget(30));
}