为了账号安全,请及时绑定邮箱和手机立即绑定

java框架选型 Guava vs Lambdaj

java框架选型 Guava vs Lambdaj

森林海 2019-03-20 22:19:48
需求查询用户最近的中奖信息 并返回中奖名单列表纯Java7实现// 返回用户最近4条的中奖纪录List<UserWinning> uwList = Lists.newArrayList(new UserWinning(userId, 1), new UserWinning(userId, 2), new UserWinning(userId, 3), new UserWinning(userId, 1));//提取奖品IDList<Integer> awardIdLsit = new ArrayList<>(uwList.size());for(UserWinning uw : uwList){    awardIdLsit.add(uw.getAwardId());}//根据奖品ID查询奖品List<Award> awardList = Lists.newArrayList(new Award(1, "奖品一"), new Award(2, "奖品二"), new Award(3, "奖品三"));//List --> Map 得到奖品ID和奖品名称MapMap<Integer, String> awardIdNameMap = new HashMap<>(awardList.size());for(Award a : awardList){    awardIdNameMap.put(a.getId(), a.getName());}评价感觉非常繁琐 特别是当你习惯了Java8的函数式编程后Guava实现List<UserWinning> uwList = Lists.newArrayList(new UserWinning(userId, 1), new UserWinning(userId, 2), new UserWinning(userId, 3), new UserWinning(userId, 1));//提取奖品ID评价代码不够简洁, 看的时候还是容易被这些匿名内部类干扰,虽然写的时候也很流畅。优点是返回的集合都是不可变的。Lambdaj实现List<UserWinning> uwList = Lists.newArrayList(new UserWinning(userId, 1), new UserWinning(userId, 2), new UserWinning(userId, 3), new UserWinning(userId, 1));//提取awardIdListList<Integer> awardIdList = extract(uwList, on(UserWinning.class).getAwardId());System.out.println(awardIdList); List<Award> awardList = Lists.newArrayList(new Award(1, "奖品一"), new Award(2, "奖品二"), new Award(3, "奖品三"));//List -> MapMap<Integer, Award> idAwardMap = index(awardList, on(Award.class).getId());//得到奖品名称列表List<String> nameList = convert(awardIdList, new Converter<Integer, String>() {    @Override    public String convert(Integer from) {        return idAwardMap.get(from).getName();    }});System.out.println(nameList);评价看起来很简洁, 一目了然。但对泛型支持的不如Guava, 如List转Map代码自动生成的是Map<Integer,Object> 需要显式修改为Map<Integer,Award>。 另外也不确定相比Guava性能如何。参考文档https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki因为线上使用的是Java7, 不能使用Java8的语法,故想选择一些工具类简化Java7的开发。 不确定该选用Gauva还是LambdaJ?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我们项目用的是Gauva


查看完整回答
反对 回复 2019-04-20
?
慕后森

TA贡献1802条经验 获得超5个赞

Lambdaj毕竟和java8原生的Lambda有差异的,如果你的项目以后会迁移到java8的话,还是谨慎考虑使用LambdaJ.


查看完整回答
反对 回复 2019-04-20
  • 3 回答
  • 0 关注
  • 570 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号