Java8之Predicate接口使用


优点:过滤条件可以不用写对应的if else条件

public static void main(String[] args) {
        List messageRecords = Lists.newArrayList();
        for (int i = 0; i < 2; i++) {
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setSourceSystemId("biz-rcs-cmc-demo");
            Map map = new HashMap<>();
            map.put(MessagePropertyNames.RETRY_ORIGIN_MSGID, i);
            messageRecord.setProperties(map);
            messageRecords.add(messageRecord);
        }
        for (int i = 0; i < 2; i++) {
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setSourceSystemId("biz-rcs-cmc");
            messageRecords.add(messageRecord);
        }
        for (int i = 0; i < 2; i++) {
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setSourceSystemId("biz-rcs-cmc-test");
            messageRecords.add(messageRecord);
        }
        List messageRecordList = conditionOrFilter(messageRecords, messageRecord -> "biz-rcs-cmc".equals(messageRecord.getSourceSystemId()), messageRecord -> {
            Integer retryOriginMsgId = messageRecord.getProperty(MessagePropertyNames.RETRY_ORIGIN_MSGID);
            return !ObjectUtils.isEmpty(retryOriginMsgId);
        });
        messageRecordList.forEach(messageRecord -> {
            log.info("sourceSystemId:{}, _retryOriginMsgId:{}", messageRecord.getSourceSystemId(), messageRecord.getProperty(MessagePropertyNames.RETRY_ORIGIN_MSGID));
        });
    }

    /**
     * 过滤条件或的关系
     * @param list
     * @param predicate
     * @param predicateTemp
     * @return
     */
    public static List conditionOrFilter(List list, Predicate predicate, Predicate predicateTemp){
        return list.stream().filter(predicate.or(predicateTemp)).collect(Collectors.toList());
    }

    /**
     * 过滤条件与的关系
     * @param list
     * @param predicate
     * @param predicateTemp
     * @return
     */
    public static List conditionAndFilter(List list, Predicate predicate, Predicate predicateTemp){
        return list.stream().filter(predicate.and(predicateTemp)).collect(Collectors.toList());
    }
    
    /**
     * 过滤单个条件
     * @param list
     * @param predicate
     * @return
     */
    public static List conditionFilter(List list, Predicate predicate){
        return list.stream().filter(predicate).collect(Collectors.toList());
    }