天天看点

java stream 使用filter后得到被过滤的原因

private boolean checkInt(int i,HashMap<Integer, String> reason){
        if (i > 3) {
            return true;
        }
        reason.put(i,"不大于3");
        return false;
    }

    @Test
    public void testFilter(){
        List<Integer> list = Arrays.asList(1, 3, 4, 5);
        HashMap<Integer, String> reasonMap = new HashMap<>();
        List<Integer> collect = list.stream().filter(integer -> checkInt(integer,reasonMap)).collect(Collectors.toList());
        System.out.println(collect);
        System.out.println(reasonMap);
    }
           
java stream 使用filter后得到被过滤的原因

我想实现导入Excel时或者批量提交一批数据时,使用stream的filter过滤数据后,把过滤失败的值和过滤失败的原因保存到数据库,把成功的值提交到下一个步骤。

上述demo中的collection就是已过滤后的数据,reasonMap就是被过滤丢弃的数据和丢弃原因

原来的实现方法是在for循环里,一个一个条件做判断,代码杂乱不易维护