Java8-Guava实战示例
生活随笔
收集整理的這篇文章主要介紹了
Java8-Guava实战示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
示例一:
跟示例三對比一下,盡量用示例三
List<InvoiceQueryBean> invoiceQueryBeanList = new ArrayList<>(); List<String> invoices = Lists.newArrayList(Iterators.transform(invoiceQueryBeanList.iterator(), new Function<InvoiceQueryBean, String>() {@Nullable@Overridepublic 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);?
參考:
轉載于:https://www.cnblogs.com/happyflyingpig/p/9004534.html
總結
以上是生活随笔為你收集整理的Java8-Guava实战示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 铁乐学python_Day42_锁和队列
- 下一篇: 华为开发者模式下如何打开gpu调试层?