stream()filter过滤ListObject

之前都是操作的现成对象,现在处理一下其他类型,
先声明一个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类型的,即truefalse,对于当前对象如果返回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]

实际中像这种一个集合塞这么多类型的还没见过,也不建议这样弄,就算是思路开拓的一种吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值