Stream 作為 Java 8 的一大亮點,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專註於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。Stream API 藉助於同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。
那麼 Java 8 的 Stream 到底是王者,還是個巨坑,這完全取決於你是怎麼玩的?
我不得不說,下面代碼是我從業 20 年(說誰呢,誰從業 20 年,我今年 19 歲!!!)看過最牛逼的 Stream 的用法:
Optional.of(req)
.map(e -> e.clueUid)
.map(id -> {
final ClueExample example = new ClueExample();
example.createCriteria()
.andClueUidEqualTo(id)
.andDeletedEqualTo(false)
.andReceivedEqualTo(false)
.andCreateTimeGreaterThan(now - cluetime);
example.setOrderByClause("create_time asc");
return example;
}) // 獲取該被邀請人所有未過期且未被領取的線索的線索
.map(clueMapper::selectByExample)
.filter(StringUtil::isNotEmpty)
.ifPresent(clues -> {
final ClueResp clueResp = Optional.of(req)
.filter(c -> {
c.count = clues.size();
return true;
})
.map(this::awardValue)
.orElseThrow(() -> ExceptionUtil.createParamException("參數錯誤"));
final Integer specialId = req.getIsHead()
? clues.get(0).getId()
: clues.get(clues.size() - 1).getId();
clues.stream()
.peek(clue -> {
final AwardConfig awardConfigclone = Optional.of(awardConfig)
.map(JSONUtil::obj2Json)
.map(json -> JSONUtil.json2Obj(json, AwardConfig.class))
.orElseGet(AwardConfig::new);
awardConfigclone.setMoney(
Optional.of(clue.getId())
.filter(specialId::equals)
.map(e -> clueResp.specialReward.longValue())
.orElse(clueResp.otherAverageReward.longValue())
);
eventActionService.assembleAward(
awardConfigclone,
clue.getAdviserUid(),
clue.getAdviserUid(),
clue.getClueUid(),
eventAction,
new PasMessageParam(),
clue.getId(),
AwardRelationType.Clud.code()
);
})
.forEach(clue -> {
clue.setOrderNo(req.orderNo);
clue.setCommodityName(req.commodityName);
clue.setOrderAmount(req.orderAmount);
clue.setReceived(true);
clue.setModifyTime(now);
clueMapper.updateByPrimaryKeySelective(clue);
});
}
);
Java 就是這麼一門神奇的語言,任何水平的人都能寫出可以運行的代碼,但是一看代碼便知水平高低。
但是這樣的 Stream 代碼你一定一口老談不吐不快,請移步下面鏈接發表評論,領取獎品:
碼雲 6 周年,我們正在徵集各種坑爹代碼,很多獎品等你來拿
詳細的參與方法請看 https://gitee.com/oschina/bullshit-codes
------ 分割線 ------
其他坑爹代碼吐槽:
[admin
]