publicstaticvoidmain(String[]args){Integer[]qq={1,2,3,4,5,6,7,8,9,10};Listl=newArrayList();Collections.addAll(l,qq);//1l=l.stream().map(e->{returne+1;}).collect(Collectors.toList());//2l.forEach(integer->integer++);}
2 回答
弒天下
TA貢獻1818條經驗 獲得超8個贊
api的設計是通過語義的不同,讓開發者做出更符合自己業務的代碼。例如題目中map和forEach的區別:map是變形操作,即:[0,1,2,3]=>[false,true,true,true],如果要完成這個事情,map就是最佳選擇,符合語義設計,代碼如下:publicstaticvoidmain(String[]args){Listnums=Arrays.asList(0,1,2,3); Listbools=nums.stream().map(num->num!=0).collect(Collectors.toList()); System.out.println(bools);}forEach是副作用,如果你只是想針對每一個值做額外的操作,如下,打印一下:publicstaticvoidmain(String[]args){Listnums=Arrays.asList(0,1,2,3); nums.forEach(num->{System.out.println(num);});}那就應該用forEach,也更符合他的語義。這是語義化的好處,在程序執行層面沒什么特別的對錯或者好壞
繁花如伊
TA貢獻2012條經驗 獲得超12個贊
你確定能在foreach里面改變integer的值?你寫的例子里兩個執行效果都不一樣,沒法比。效果一樣的前提下,如果不是CPU密集型的功能,一般哪個可讀性更好久用哪個l.stream().map(e->{returne+1;}).collect(Collectors.toList());這個會創建一個新的list,里面的值是l的對應位置元素值+1;而l.forEach(i->i++)相當于l.forEach(i->{i++;return;})執行完什么都沒變
