stream api相关的用法

    今天在公司的项目里用到了java8中的stream相关的api,原先需要利用guava中的Multimaps.index方法,可以用steam的api完美解决,并且代码量缩小了很多:

// guava库
// ImmutableListMultimap<String, OperatorSubscriptionResourceAPIVO> subscriptionApiMap = Multimaps.index(apiVoList, new Function<OperatorSubscriptionResourceAPIVO, String>() {
//     @Nullable
//     @Override
//        public String apply(@Nullable OperatorSubscriptionResourceAPIVO vo) {
//            return vo.getSubscription();
//        }
//     });
// stream api
Map<String, List<OperatorSubscriptionResourceAPIVO>> subscriptionApiMap = 
    apiVoList.stream().collect(Collectors.groupingBy(vo -> vo.getSubscription()));

这种利用pipline的api接口,之前在mongodb里碰到过,当时觉得也没有多优雅,没想到在java里用起来很爽。

还有类似的:


//Set<String> resourceGroupSet = new HashSet<>();
//for(OperatorSubscriptionResourceAPIVO vo : voList) {
//    if(StringUtils.isNotBlank(vo.getResourceGroup())) {
//         resourceGroupSet.add(vo.getResourceGroup());
//    }
//}

// stream api
Set<String> resourceGroupSet = voList.stream()
        .map(vo -> vo.getResourceGroup())
        .filter(StringUtils::isNotBlank)
        .collect(Collectors.toSet());

 

stream api的的其它用法,可以参考:

https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

http://blog.csdn.net/liudongdong0909/article/details/77429875

目前看来guava库存在的价值就剩下一个cache了,看看什么时候jdk能加进来^_^

 

posted @ 2018-02-23 20:07  xjlnjut730  阅读(19)  评论(0)    收藏  举报