歡迎您光臨本站 註冊首頁

坑爹代碼 | Stream 玩得最 6 的代碼,看過的人都驚呆了

←手機掃碼閱讀     admin @ 2019-06-11 , reply:0

Stream 作為 Java 8 的一大亮點,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專註於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。Stream API 藉助於同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。

圖 1.  流管道 (Stream Pipeline) 的構成

那麼 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 代碼你一定一口老談不吐不快,請移步下面鏈接發表評論,領取獎品:

https://gitee.com/oschina/bullshit-codes/blob/master/java/NBStream.java

碼雲 6 周年,我們正在徵集各種坑爹代碼,很多獎品等你來拿

詳細的參與方法請看  https://gitee.com/oschina/bullshit-codes

------ 分割線 ------

其他坑爹代碼吐槽:

  • 坑爹代碼 | 這樣使用 StringBuffer 的方法有什麼坑?
  • 坑爹代碼 | 你寫過的最長的一行代碼有多長???
  • 坑爹代碼 | 循環+條件判斷,你最多能嵌套幾層?
  • 坑爹代碼 | 為了後期優化查詢速度 ~ 頗有商業頭腦!
  • 坑爹代碼 | 你是如何被異常玩然後變成玩異常的?

[admin ]

來源:OsChina
連結:https://www.oschina.net/news/107345/gitee-bullshit-amazing-stream
坑爹代碼 | Stream 玩得最 6 的代碼,看過的人都驚呆了已經有175次圍觀

http://coctec.com/news/all/show-post-206861.html