第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

只用Java Stream來映射好不好?

只用Java Stream來映射好不好?

慕萊塢森 2023-07-19 10:00:48
讓我們假設(shè)開發(fā)中的一種非常正常的行為:我有一個 Collection 并且需要將此 Collection 映射到另一個對象。一個平面地圖場景。例子:我們有一些方法必須返回一組源對象:public Set<Source> getSources(String searchText);讓我們找出一種實現(xiàn)方式:public Set<Source> getSources(String searchText) {  HashSet<Source> sources = new HashSet<>();  Set<String> urls = this.crawlerService.getUrls(searchText);  urls.forEach(url -> sources.add(Source.builder().url(url).build()));  return sources;}Java Stream 的另一種實現(xiàn):public Set<Source> getSources(String searchText) {  Set<String> urls = this.crawlerService.getUrls(searchText);  return urls.stream()             .flatMap(e -> Stream.of(Source.builder().url(e).build()))             .collect(Collectors.toSet());}我更喜歡流方式,但我有一些問題:轉(zhuǎn)換為流和收集設(shè)置在性能方面有多昂貴?以這種方式使用 Stream 是可以接受的還是太過分了?還有其他一些使用 java Stream 來完成這種場景的最佳方法嗎?
查看完整描述

1 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊

就性能而言,轉(zhuǎn)換為流和收集為設(shè)置的成本有多高?以這種方式使用 Stream 是可以接受的還是太過分了?


首先,流已經(jīng)比簡單地創(chuàng)建一個新集合并使用循環(huán)向其中添加元素要昂貴,但除非您進(jìn)行基準(zhǔn)測試,否則您不會注意到這種成本。因此,繼續(xù)對這兩個示例進(jìn)行基準(zhǔn)測試。


如果您看一下 java 是如何實現(xiàn)流的,您會意識到它只是現(xiàn)有流的靈活包裝器java.util.Iterator,因此使用流所獲得的只是它們的靈活性(有時還有速度,但這不應(yīng)該是賣點)


至于您的流示例,通過使用創(chuàng)建中間流會導(dǎo)致流變得昂貴flatMap。所有flatMap要做的就是撤消您在其中所做的操作并返回流的內(nèi)容,因此您可能剛剛使用過map。


public Set<Source> getSources(String searchText) {


? Set<String> urls = this.crawlerService.getUrls(searchText);


? return urls.stream()

? ? ? ? ? ? ?.map(e -> Source.builder().url(e).build())

? ? ? ? ? ? ?.collect(Collectors.toSet());

}

查看完整回答
反對 回復(fù) 2023-07-19
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號