之前都是操作的现成对象,现在处理一下其他类型,
先声明一个Map对象的List集合,
Map<String, String> map1 = new HashMap<>();
Map<String, String> map2 = new HashMap<>();
Map<String, String> map3 = new HashMap<>();
map1.put("type", "1");
map2.put("type", "2");
map3.put("type", "3");
List<Object> fieldsList = new ArrayList<>();
fieldsList.add(map1);
fieldsList.add(map2);
fieldsList.add(map3);
然后过滤一下type等于1的map对象
List<Object> newObj = fieldsList.stream().filter(a -> {
Map<String, String> curMap = (Map<String, String>) a;
String curType = curMap.get("type");
if ("1".equals(curType)){
return true;
}
return false;
}).collect(Collectors.toList());
System.out.println(newObj.toString());
打印结果:[{type=1}]
之前在filter里面都是apple.getWeight() > 50这种直接判断属性值的,现在得把方法解剖开,进行详细判断了,
首先说一下,filter方法里的所有处理返回的结果都是boolean类型的,即true或false,对于当前对象如果返回true则挑选出来,为false则略过最后生成新集合,
所以对于Map类型的,在里面做一个转换在判断就行了,
如果过滤type为1和2的继续加条件就行了,
List<Object> newObj = fieldsList.stream().filter(a -> {
Map<String, String> curMap = (Map<String, String>) a;
String curType = curMap.get("type");
if ("1".equals(curType) || "2".equals(curType)) {
return true;
}
return false;
}).collect(Collectors.toList());
System.out.println(newObj.toString());
打印结果: [{type=1}, {type=2}]
再试试杂烩集合的,在List里面加上不同类型的
int a = 123;
String b = "abc";
boolean c = true;
List<Object> tList = new ArrayList<>();
tList.add(a);
tList.add(b);
tList.add(c);
先获取一下整型的:
List<Object> curList = tList.stream().filter(d -> {
if (d instanceof Integer) {
return true;
}
return false;
}).collect(Collectors.toList());
System.out.println(curList.toString());
打印结果:[123]
再试试String的:
List<Object> curList = tList.stream().filter(d -> {
if (d instanceof String) {
return true;
}
return false;
}).collect(Collectors.toList());
System.out.println(curList.toString());
打印结果:[abc]
实际中像这种一个集合塞这么多类型的还没见过,也不建议这样弄,就算是思路开拓的一种吧