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

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

java8 stream根據(jù)下標分組

java8 stream根據(jù)下標分組

守候你守候我 2019-05-25 14:47:34
我有個list想要按照奇偶下標生成兩組list,只利用java8的stream可以做到嗎?比如[1,3,5,7,9],按照奇偶下標分成[1,5,9]和[3,7],但是stream似乎無法獲取下標,所以試了半天也不行。另外,java8的stream以后可以完全取代for循環(huán)嗎?我感覺有些復雜的邏輯拿stream折騰不是一個好的選擇
查看完整描述

2 回答

?
慕的地10843

TA貢獻1785條經(jīng)驗 獲得超8個贊

這個要從為什么java8會弄出stream這種循環(huán)方式說起了
以前的for循環(huán)是屬于外部循環(huán),由調(diào)用者自己顯式的取出每個元素加以處理,尤其是并行處理時,非常痛苦
而stream是屬于內(nèi)部循環(huán),你可以無需關(guān)心它是如何循環(huán)的,要是并行的時候如何優(yōu)化,這些你都可以不管,你只需要簡簡單單告訴他需要做什么處理即可
舉個簡單的例子:
地上有很多乒乓球,爸爸要讓你兒子撿起來放到盒子里如果是外部循環(huán),可能這種模式爸爸:地上還有球么兒子:有爸爸:那把它撿起來放到盒子里,還有么?兒子:有爸爸:繼續(xù)撿起來放到盒子里,還有么?兒子:有爸爸:接著撿起來放到盒子里,還有么?兒子:沒有了爸爸:ok,收拾好了
如果是內(nèi)部循環(huán)爸爸:把地上的球撿起來全部放到盒子里兒子:好,完成
例子可能很牽強,但是我們作為開發(fā)者,就是爸爸,只需要告訴兒子(JDK)把球放進盒子這個動作就好,具體兒子怎么放,一次一個手拿一個,還是一次每個手拿一個,由它自己來思考,不需要我們?nèi)ブ笓],我們只關(guān)注具體需要做的事就好
所以說stream是一種內(nèi)部循環(huán),你不需要去關(guān)注下標...關(guān)注下標的話,從某種意義上來說,還是外部循環(huán)的思想在處理了,當然題主的問題中,明確就是要求是關(guān)注下標了,貌似好像stream是沒法寫似的
其實不然,寫肯定能寫的,只是說換一種方式而已,不把下標當成循環(huán)用的元素,而是把它與具體需要循環(huán)的數(shù)字綁定起來,寫出來差不多是這個樣子
publicstaticvoidmain(String[]args){
Listlist=Arrays.asList(1,3,5,7,9);
Map>collect=IntStream.rangeClosed(1,list.size())
.boxed()
//把數(shù)字和下標綁定起來
.map(i->mapToEntry(i,list.get(i-1)))
//按照下標是否能被2整除進行分組
.collect(Collectors.partitioningBy(simpleEntry->Integer.parseInt(simpleEntry.getKey().toString())%2==0,
Collectors.mapping(Map.Entry::getValue,Collectors.toList())));
//偶數(shù)列表3,9
ListevenList=collect.get(Boolean.TRUE);
//奇數(shù)列表1,5,7
ListoddList=collect.get(Boolean.FALSE);
}
privatestaticAbstractMap.SimpleEntrymapToEntry(Integeri,Integerinteger){
returnnewAbstractMap.SimpleEntry(i,integer);
}
                            
查看完整回答
反對 回復 2019-05-25
  • 2 回答
  • 0 關(guān)注
  • 3461 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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