jdk1.8以上才能使用,叫内部迭代
没有写类,直接写的map,实体类也是可以用的
这样看起来简洁一点
public static void main(String args[]){
List<Map<String,Object>> list=new ArrayList<>();
for(int i=0;i<5;i++){
Map<String,Object> map=new HashMap<>();
map.put("type",i);
list.add(map);
}
System.out.println("list过滤前的数据:"+list);
System.out.println("list过滤前的数量:"+list.size());
//过滤获取 type=2的数据
List<Map<String,Object>> list2 = list.stream().filter((Map a) -> ("2".equals(a.get("type").toString()))).collect(Collectors.toList());
//只获取数量也可以这样写
Long list2Count = list.stream().filter((Map a) -> ("2".equals(a.get("type").toString()))).count();
System.out.println("list过滤后的数据:"+list2);
System.out.println("list过滤后的数量:"+list2Count);
System.out.println("list过滤后的数量:"+list2.size());
}
效果图
JSONArray数据使用Stream filter
@org.junit.Test
public void t3() {
//初始化数据
JSONArray listD = new JSONArray() {{
add(new JSONObject() {{
put("STATUS", "Y");
put("DOC_NO", "1");
}});
add(new JSONObject() {{
put("STATUS", "N");
put("DOC_NO", "2");
}});
}};
//1. JSONArray->JSONObject->JSONArray 自定义获取STATUS=Y的数据
JSONArray listD1 = listD.stream().filter(a -> {
JSONObject jsona = (JSONObject) a;
//如果STATUS=Y 则返回true
if (jsona.getString("STATUS").equals("Y")) {
return true;
} else {
//如果STATUS!=Y 则返回false 抛掉该数据
return false;
}
}).collect(Collectors.toCollection(JSONArray::new));
//2. JSONArray->Map->JSONArray 自定义获取STATUS=Y的数据
JSONArray listD2 = listD.stream().map(obj -> {
Map<String, Object> returnObj = new JSONObject();
//强制转换obj
Map<String, Object> jsonObj = (JSONObject) obj;
jsonObj.forEach((key, val) -> {
//如果STATUS=Y 则put到 returnObj 中
if ("STATUS".equals(key) && "Y".equals(val)) {
returnObj.put(key, (val));
}
});
return returnObj;
}).collect(Collectors.toCollection(JSONArray::new));
log.info("\nlistD{}", listD);
log.info("\nlistD1{}", listD1);
log.info("\nlistD2{}", listD2);
}
执行结果:
2021-01-11 15:32:21.533 INFO --- [ main] com.erp.azwmsmybatis.Test :
listD[{"DOC_NO":"1","STATUS":"Y"},{"DOC_NO":"2","STATUS":"N"}]
2021-01-11 15:32:21.573 INFO --- [ main] com.erp.azwmsmybatis.Test :
listD1[{"DOC_NO":"1","STATUS":"Y"}]
2021-01-11 15:32:21.576 INFO --- [ main] com.erp.azwmsmybatis.Test :
listD2[{"STATUS":"Y"},{}]