zoukankan      html  css  js  c++  java
  • Java8-Guava实战示例

     

    示例一:

    跟示例三对比一下,尽量用示例三

    List<InvoiceQueryBean> invoiceQueryBeanList = new ArrayList<>();
    List<String> invoices = Lists.newArrayList(Iterators.transform(
            invoiceQueryBeanList.iterator(), new Function<InvoiceQueryBean, String>() {
        @Nullable
        @Override
        public String apply(@Nullable InvoiceQueryBean input) {
            if (StringUtils.isNotBlank(input.getLoanInvoiceId())) {
                return input.getLoanInvoiceId();
            } else {
                return null;
            }
        }
    }));
    //去除空的 Iterators.removeIf(invoices.iterator(), StringUtils::isBlank);

    示例二:

    public static List<PersonLoanInvoiceQueryPojo> getInvoiceQueryPojoList(List<InvoiceQueryBean> invoiceQueryBean) {
        return Lists.newArrayList(Iterators.transform(invoiceQueryBean.iterator(),
                input -> input == null ? null :
                        PersonLoanInvoiceQueryPojo.Builder.getInstance()
                                .addLoanInvoiceId(input.getLoanInvoiceId())
                                .addUserName(input.getUserName())
                                .addCertificateKind(input.getCertificateKind())
                                .addCertificateNo(input.getCertificateNo()).addProductName(input.getProductName())
                                .addMerchantName(input.getMerchantName())
                                .addStoreName(input.getStoreName())
                                .addApplyDate(input.getApplyDate()).addLoanAmount(input.getLoanAmount())
                                .addLoanPeriod(input.getLoanPeriod()).addLoanPurpose(input.getLoanPurpose())
                                .addLoanDate(input.getLoanDate()).addRate(input.getRate())
                                .addChannelNo(input.getChannelNo())
                                .addApproveDate(input.getApproveDate())
                                .addReply(input.getReply())
                                .addMarketingCenterId(input.getMarketingCenterId()).build()));
    }
    public class PersonLoanInvoiceQueryPojo implements Serializable{
        
        private static final long serialVersionUID = -408985049449365784L;
    
        private String loanInvoiceId;
        
        private String userId;
        
        private String userName;
    
        public static class Builder {
            private PersonLoanInvoiceQueryPojo instance = new PersonLoanInvoiceQueryPojo();
    
            private Builder(){}
    
            public static Builder getInstance() {
                return new Builder();
            }
    
            public static Builder getInstance(PersonLoanInvoiceQueryPojo instance){
                Builder builder = new Builder();
                builder.instance = instance;
                return builder;
            }
    
            public Builder addLoanInvoiceId(String loanInvoiceId) {
                this.instance.setLoanInvoiceId(loanInvoiceId);
                return this;
            }
    
            public Builder addUserId(String userId) {
                this.instance.setUserId(userId);
                return this;
            }
    
            public Builder addUserName(String userName) {
                this.instance.setUserName(userName);
                return this;
            }
    
            public PersonLoanInvoiceQueryPojo build() {
                return this.instance;
            }
    
        }
        
        setters();&getters();
    }

     示例三:方法引用

      方法引用主要有三类:

        (1)指向静态方法的方法引用,(例如:Integer中的parseInt方法,写作Integer::parseInt

        (2)指向任意类型实例方法的方法引用(例如String中的length方法,写作String::length

        (3)指向现有对象的实例方法的方法引用(如下例)

    import com.google.common.collect.Iterators;
    import com.google.common.collect.Lists;
    
    List<CreditPersonalInfoChangeApplySerial> applySerialList = new ArrayList<>();
    List<String> operatorNoList = Lists.newArrayList(
                Iterators.transform(applySerialList.iterator(), CreditPersonalInfoChangeApplySerial::getOperatorNo)); //这个叫做lambda的方法引用,注意方法引用的这个方法不需要()

     示例四:

      Lambad将List转换成Map

    import com.google.common.collect.Maps;
    
    List<QueryUserAppInfoByUserIdListPojo> operatorInfoList = new ArrayList<>();
    Map<String, QueryUserAppInfoByUserIdListPojo> operatorMap
                = Maps.uniqueIndex(operatorInfoList.iterator(), QueryUserAppInfoByUserIdListPojo::getUserId);
                
    public class QueryUserAppInfoByUserIdListPojo implements Serializable {
        private static final long serialVersionUID = 6876288995978264269L;
        private String userId;
        
        public String getUserId() {
            return this.userId;
        }
    
        public void setUserId(String userId) {
            this.userId = userId;
        }
    
    }

     示例五:

    List<UserPojo> list =  new ArrayList<>();
    list.forEach(input -> {
        if (input.getCertificateKind().equals(EnumCertificateKind.RESIDENT_IDENTITY_CARD)) {
            userCertificateMap.put(pojo.getUserId(), input);
        }
    });

     示例六:

      遍历的时候需要使用到元素的索引,很可惜,Java8 的 Iterable 并没有提供一个带索引的 forEach 方法,自动动手写一个满足自己的需求。

    import java.util.Objects;
    import java.util.function.BiConsumer;
    
    /**
     * Iterable 的工具类
     */
    public class Iterables {
    
        public static <E> void forEach(
                Iterable<? extends E> elements, BiConsumer<Integer, ? super E> action) {
            Objects.requireNonNull(elements);
            Objects.requireNonNull(action);
    
            int index = 0;
            for (E element : elements) {
                action.accept(index++, element);
            }
        }
    }
    public static void main(String[] args) throws Exception {
    
        List<String> list = Arrays.asList("a", "b", "b", "c", "c", "c", "d", "d", "d", "f", "f", "g");
    
        Iterables.forEach(list, (index, str) -> System.out.println(index + " -> " + str));
    }

     示例七:Iterators.find

    注意:find()函数有两个重载方法,其中一个是带 defaultValue 的,注意如果别迭代的集合没有符合条件的数据的话,一定要定义一个默认值。否则会报NoSuchElementException异常

    Iterators.find(pojoList.iterator(), input -> input != null, null);

    参考:

  • 相关阅读:
    net core 使用 rabbitmq
    asp.net core WebApi 返回 HttpResponseMessage
    asp.net core 2.1 WebApi 快速入门
    JQuery EasyUI combobox动态添加option
    php截取字符去掉最后一个字符
    JQuery EasyUI Combobox的onChange事件
    对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
    Access2007 操作或事件已被禁用模式阻止解决办法
    Easyui 中 Tabsr的常用方法
    Win 7 IE11不能下载文件,右键另存为也不行
  • 原文地址:https://www.cnblogs.com/happyflyingpig/p/9004534.html
Copyright © 2011-2022 走看看