需求查詢用戶最近的中獎信息 并返回中獎名單列表純Java7實現(xiàn)// 返回用戶最近4條的中獎紀(jì)錄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());}//根據(jù)獎品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());}評價感覺非常繁瑣 特別是當(dāng)你習(xí)慣了Java8的函數(shù)式編程后Guava實現(xiàn)List<UserWinning> uwList = Lists.newArrayList(new UserWinning(userId, 1), new UserWinning(userId, 2), new UserWinning(userId, 3), new UserWinning(userId, 1));//提取獎品ID評價代碼不夠簡潔, 看的時候還是容易被這些匿名內(nèi)部類干擾,雖然寫的時候也很流暢。優(yōu)點是返回的集合都是不可變的。Lambdaj實現(xiàn)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轉(zhuǎn)Map代碼自動生成的是Map<Integer,Object> 需要顯式修改為Map<Integer,Award>。 另外也不確定相比Guava性能如何。參考文檔https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki因為線上使用的是Java7, 不能使用Java8的語法,故想選擇一些工具類簡化Java7的開發(fā)。 不確定該選用Gauva還是LambdaJ?
添加回答
舉報
0/150
提交
取消