1. 主页 > 好文章

Java Stream流必备方法大全:从filter到collect的实战技巧解析


馃 鍏堝敔涓棏锛氫綘鍐欎唬鐮佽繕鍦ㄧ敤for寰幆纭垰鏁版嵁鍚楋紵

鏈€杩戞€绘湁浜洪棶鎴戯細"鍝ヤ滑鍎匡紝鐜板湪闈㈣瘯鍔ㄤ笉鍔ㄥ氨闂甋tream娴侊紝杩欑帺鎰忓効鍒板簳鍜嬬敤鍟婏紵" 鍒厡锛佷粖澶╁挶浠氨鐢ㄦ渶鎺ュ湴姘旂殑鏂瑰紡锛屾妸Java8杩欎釜鏉€鎵嬮攺鈥斺€擲tream娴佺殑鏍稿績鏂规硶鎺板紑鎻夌锛屼繚鍑嗕綘鐪嬪畬灏辫兘涓婃墜锛?/p>

锛堢獊鐒跺仠椤匡級绛夌瓑...浣犺涓嶄細杩濻tream鏄暐閮戒笉鐭ラ亾鍚э紵锛堢瑧锛夌畝鍗曟潵璇达紝瀹冨氨鍍忔潯鈥?strong>鈥嬫櫤鑳芥祦姘寸嚎鈥?/strong>鈥嬶紝鏁版嵁鍝楀暒鍟︽祦杩囧幓锛屾兂瑕佸暐鎿嶄綔鍔ㄥ姩鎵嬫寚澶村氨琛岋紒


馃殌 涓€銆佹柊鎵嬫潙蹇呭锛?涓繀椤昏璇嗙殑Stream鏂规硶

鈥?strong>鈥嬧枍filter() - 浣犵殑鏁版嵁绛涘瓙鈥?/strong>鈥?br/> 锛堟暡榛戞澘锛夎繖缁濆鏄娇鐢ㄧ巼TOP1鐨勬柟娉曪紒鎯宠薄浣犳湁涓€绛愯嫻鏋滐紝鍙兂鎸戝嚭绾㈣嫻鏋滐紝浠g爜鎬庝箞鍐欙紵

java澶嶅埗
List redApples = apples.stream()
    .filter(apple -> "red".equals(apple.getColor())) //鈫愰噸鐐圭湅杩欙紒
    .collect(Collectors.toList());

鈥?strong>鈥嬸煈?鍒掗噸鐐光€?/strong>鈥嬶細

  • 鍙傛暟鏄釜鈥?strong>鈥嬫潯浠跺垽鏂紡鈥?/strong>鈥嬶紙瀛﹀悕鍙玃redicate锛?/li>
  • 鈥?strong>鈥嬪埆韪╁潙鈥?/strong>鈥嬶細filter鍚庝竴瀹氳鎺ユ敹闆嗘搷浣滐紝涓嶇劧鐧藉繖娲伙紒
  • 锛堢獊鐒舵彃璇濓級鍝庯紵浣犻棶绠ご绗﹀彿鍟ユ剰鎬濓紵杩欏氨鏄痩ambda琛ㄨ揪寮忓晩锛岀浉褰撲簬鍖垮悕鍑芥暟

鈥?strong>鈥嬧枍map() - 鍙樺舰閲戝垰寮忔搷浣溾€?/strong>鈥?br/> 鎯宠鎶婅嫻鏋滃璞″彉鎴愯嫻鏋滈噸閲忥紵鐪嬪ソ浜嗭紒

java澶嶅埗
List weights = apples.stream()
    .map(Apple::getWeight)  // 鏂规硶寮曠敤鏇寸畝娲?/span>
    .collect(Collectors.toList());

鈥?strong>鈥嬸焼?瀵规瘮浼犵粺鍐欐硶鈥?/strong>鈥?/p>

Stream鍐欐硶for寰幆鍐欐硶
1琛屼唬鐮佹悶瀹?/td>闇€瑕?-5琛?/td>
閾惧紡璋冪敤瓒呮竻鏅?/td>瀹规槗宓屽娣蜂贡

锛堢獊鐒舵媿澶ц吙锛夊浜嗭紒閬囧埌宓屽闆嗗悎灏辩敤鈥?strong>鈥媐latMap鈥?/strong>鈥嬶紝鍍忓墺娲嬭懕涓€鏍锋妸鏁版嵁鎽婂钩锛?/p>


鈥?strong>鈥嬧枍collect() - 缁堟瀬鏀跺壊鑰呪€?/strong>鈥?br/> 锛堜弗鑲冭劯锛夎繖鏄暣涓祦姘寸嚎鐨勬敹灏惧ぇ鎷涳紒涓句釜鏍楀瓙锛氭兂鎶婅嫻鏋滄寜棰滆壊鍒嗙粍鎬庝箞鍔烇紵

java澶嶅埗
Map> colorGroups = apples.stream()
    .collect(Collectors.groupingBy(Apple::getColor));

鈥?strong>鈥嬸煂?鏇村楠氭搷浣溾€?/strong>鈥嬶細

  • 杞垚Set锛?code>Collectors.toSet()
  • 鎷兼帴瀛楃涓诧細Collectors.joining(", ")
  • 锛堢绉樹竴绗戯級鐢氳嚦鑳界帺缁熻锛氭眰鍜屻€佸钩鍧囧€笺€佹瀬鍊?..

馃敟 浜屻€侀珮鎵嬭繘闃讹細杩欎簺闅愯棌鎶€宸т綘鐭ラ亾鍚楋紵

鈥?strong>鈥嬧枍骞惰娴佺湡棣欒鍛婏紒鈥?/strong>鈥?br/> 锛堢獊鐒跺帇浣庡0闊筹級鍋峰伔鍛婅瘔浣狅紝鍙鍔犱釜parallel()锛屽鐞嗙櫨涓囨暟鎹揩寰楅璧凤細

java澶嶅埗
List bigApples = apples.parallelStream()
    .filter(a -> a.getWeight() > 150)
    .collect(Collectors.toList());

鈥?strong>鈥嬧殸锔?浣嗘槸娉ㄦ剰鈥?/strong>鈥嬶細

  • 鏁版嵁閲忓皬鍒敤锛佺嚎绋嬪垏鎹㈠弽鑰屾洿鎱?/li>
  • 绾跨▼瀹夊叏闂瑕佸綋蹇冿紙姣斿鎿嶄綔ArrayList锛?/li>

鈥?strong>鈥嬧枍璋冭瘯澶ф硶锛歱eek()鈥?/strong>鈥?br/> 锛堟媿妗屽瓙锛夎繖涓鍣ㄥ繀椤诲畨鍒╋紒鍍忚皟璇曟椂鎵撳嵃鏃ュ織锛?/p>

java澶嶅埗
apples.stream()
    .peek(a -> System.out.println("褰撳墠澶勭悊锛?+a)) //鈫愮湅杩欓噷
    .filter(...)

馃挕 鐙琛€娉粡楠?/h3>

鍘诲勾鍋氱數鍟嗛」鐩椂锛岀敤Stream澶勭悊10涓囪鍗曟暟鎹紝鏈潵鐢ㄦ櫘閫氭祦瑕?绉掞紝鏀规垚骞惰娴佸悗...锛堟繁鍚镐竴鍙f皵锛夌洿鎺ュ共鍒?.3绉掞紒浣嗗悗鏉ュ彂鐜版湁涓潙鈥斺€斺€?strong>鈥嬪苟琛屾祦浣跨敤鍏变韩鍙橀噺瀵艰嚧鏁版嵁閿欎贡鈥?/strong>鈥嬶紝宸偣鑳屼簨鏁咃紒鎵€浠ュ垏璁帮細鈥?strong>鈥嬪苟琛屾祦瑕侀伩鍏嶄慨鏀瑰閮ㄧ姸鎬佲€?/strong>鈥嬶紒


馃幆 鏈€鍚庤鍙ュぇ瀹炶瘽

Stream铏藉ソ锛屽彲鍒椽鏉紒绠€鍗曞惊鐜繕鏄敤for鏇寸洿瑙傘€備絾瑕佽澶勭悊澶嶆潅鏁版嵁鈥斺€旓紙鎷夐暱闊筹級閭e繀椤诲緱鏄疭tream鐨勫ぉ涓嬶紒璇曠潃鐢ㄤ粖澶╁鐨勬柟娉曟敼閫犱綘鐨勬棫浠g爜锛屼繚鍑嗗悓浜嬬洿鍛煎唴琛岋紒

锛堢獊鐒舵敹灏撅級濂戒簡涓嶅暟鍡︿簡锛岃刀绱ф墦寮€IDE瀹炴搷鍚э紒閬囧埌闂璇勮鍖鸿锝?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载