zoukankan      html  css  js  c++  java
  • Java8之Predicate接口使用

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

    public static void main(String[] args) {
            List<MessageRecord> messageRecords = Lists.newArrayList();
            for (int i = 0; i < 2; i++) {
                MessageRecord messageRecord = new MessageRecord();
                messageRecord.setSourceSystemId("biz-rcs-cmc-demo");
                Map<String, Object> 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<MessageRecord> 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<MessageRecord> conditionOrFilter(List<MessageRecord> list, Predicate<MessageRecord> predicate, Predicate<MessageRecord> predicateTemp){
            return list.stream().filter(predicate.or(predicateTemp)).collect(Collectors.toList());
        }
    
        /**
         * 过滤条件与的关系
         * @param list
         * @param predicate
         * @param predicateTemp
         * @return
         */
        public static List<MessageRecord> conditionAndFilter(List<MessageRecord> list, Predicate<MessageRecord> predicate, Predicate<MessageRecord> predicateTemp){
            return list.stream().filter(predicate.and(predicateTemp)).collect(Collectors.toList());
        }
        
        /**
         * 过滤单个条件
         * @param list
         * @param predicate
         * @return
         */
        public static List<MessageRecord> conditionFilter(List<MessageRecord> list, Predicate<MessageRecord> predicate){
            return list.stream().filter(predicate).collect(Collectors.toList());
        }
    

      

    美梦成真,变为事实。
  • 相关阅读:
    IOS开发中针对UIImageView的几种常用手势
    VIew中的触摸事件 touchBegin 等一系列方法
    控制器的跳转-modal与push
    终于决定把自己的小窝从CSDN搬到博客园了
    UIView的frame和bounds区别
    android中数据存储的contentprovider的使用方法
    android中Json数据保存方式
    android手机操作SD的使用方法
    android手机中图片的拖拉及浏览功能
    android图片切换ImageSwichter的动画切换效果
  • 原文地址:https://www.cnblogs.com/x-ll123/p/15015310.html
Copyright © 2011-2022 走看看