這個要從為什么java8會弄出stream這種循環方式說起了以前的for循環是屬于外部循環,由調用者自己顯式的取出每個元素加以處理,尤其是并行處理時,非常痛苦而stream是屬于內部循環,你可以無需關心它是如何循環的,要是并行的時候如何優化,這些你都可以不管,你只需要簡簡單單告訴他需要做什么處理即可舉個簡單的例子:地上有很多乒乓球,爸爸要讓你兒子撿起來放到盒子里如果是外部循環,可能這種模式爸爸:地上還有球么兒子:有爸爸:那把它撿起來放到盒子里,還有么?兒子:有爸爸:繼續撿起來放到盒子里,還有么?兒子:有爸爸:接著撿起來放到盒子里,還有么?兒子:沒有了爸爸:ok,收拾好了如果是內部循環爸爸:把地上的球撿起來全部放到盒子里兒子:好,完成例子可能很牽強,但是我們作為開發者,就是爸爸,只需要告訴兒子(JDK)把球放進盒子這個動作就好,具體兒子怎么放,一次一個手拿一個,還是一次每個手拿一個,由它自己來思考,不需要我們去指揮,我們只關注具體需要做的事就好所以說stream是一種內部循環,你不需要去關注下標...關注下標的話,從某種意義上來說,還是外部循環的思想在處理了,當然題主的問題中,明確就是要求是關注下標了,貌似好像stream是沒法寫似的其實不然,寫肯定能寫的,只是說換一種方式而已,不把下標當成循環用的元素,而是把它與具體需要循環的數字綁定起來,寫出來差不多是這個樣子publicstaticvoidmain(String[]args){Listlist=Arrays.asList(1,3,5,7,9);Map>collect=IntStream.rangeClosed(1,list.size()).boxed()//把數字和下標綁定起來.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())));//偶數列表3,9ListevenList=collect.get(Boolean.TRUE);//奇數列表1,5,7ListoddList=collect.get(Boolean.FALSE);}privatestaticAbstractMap.SimpleEntrymapToEntry(Integeri,Integerinteger){returnnewAbstractMap.SimpleEntry(i,integer);}