一、Java 8引入了全新的Stream API。這裏的Stream和I/O流不一樣,它更像具備Iterable的集合類,但行爲和集合類又有所不一樣。編程
二、stream是對集合對象功能的加強,它專一於對集合對象進行各類很是便利、高效的聚合操做,或者大批量數據操做。less
三、只要給出須要對其包含的元素執行什麼操做,好比 「過濾掉長度大於 10 的字符串」、「獲取每一個字符串的首字母」等,Stream 會隱式地在內部進行遍歷,作出相應的數據轉換。函數式編程
一、函數式編程帶來的好處,我認爲主要是在於使得代碼邏輯更加清晰,可讀性加強,便於維護,也更加不容易出錯。函數
二、使用Stream對集合的一些操做,每每代碼量只有傳統的循環遍歷的一半甚至更少。less code,less bug!spa
三、有逼格3d
public List<Map<String,Object>> list(){
Map<String,Object> map1=new HashMap<>();
map1.put("id","1");
map1.put("name","小張");
map1.put("age","10");
map1.put("sex","男");
Map<String,Object> map2=new HashMap<>();
map2.put("id","2");
map2.put("name","小李");
map2.put("age","15");
map2.put("sex","女");
Map<String,Object> map3=new HashMap<>();
map3.put("id","3");
map3.put("name","小王");
map3.put("age","30");
map3.put("sex","男");
List<Map<String,Object>> list=new ArrayList<>();
list= Arrays.asList(map1,map2,map3);
return list;
}
fiter接受一個函數做爲參數,該函數用lambda表達式表示。如性別爲男,則會將全部性別爲男的元素留下,餘下的剔除。code
List<Map<String,Object>> list =new test().getlist();
System.out.println(list);
List<Map<String,Object>> list2= list.stream().filter(stu->
stu.get("sex").equals("男")).collect(toList());
System.out.println(list2);
控制檯輸出:對象
lanbda表達式中 ->右邊返回boolean類型:true 則留下,false則剔除blog
public static void main(String[] args) { List<Map<String, Object>> list = new test().getlist(); System.out.println(list); List<Map<String, Object>> list2 = list.stream().filter(stu -> { if (Integer.parseInt(stu.get("age").toString()) > 20) { return true; } else { return false; } } ).collect(toList()); System.out.println(list2); }
輸出:字符串
特別注意:這裏fiter操做是建立了一個新的對象的,也就是說並不會改變原list,所以必需要接一下。
Map是將list中的元素改變,比較經常使用,也很好用
public static void main(String[] args) { List<Map<String, Object>> list = new test().getlist(); System.out.println(list); list.stream().map(stu->{ stu.put("score",90); return stu; } ).collect(toList()); System.out.println(list1); }
輸出:
注意一點Map方法,當返回的是原對象自己的時候,就不會建立新的List對象,也就是說原來的list會改變,正經常使用的時候也就不須要接了。
而若是返回的不是原對象的話,就會建立新list對象了,就須要接一下。這裏也很好理解,若是這裏不建立新對象的話,原來對象有泛型約束,就矛盾了啊。示例以下:
public static void main(String[] args) { List<Map<String, Object>> list = new test().getlist(); System.out.println(list); List<String> list1= list.stream().map(stu->{ return stu.get("name").toString(); } ).collect(toList()); System.out.println(list1); }
輸出:
flatMap返回參數爲Stream,能夠將list中的元素拆分爲多個list。
public static void main(String[] args) { List<Map<String, Object>> list = new test().getlist(); System.out.println(list); List<String> list1= list.stream().flatMap(person->{ String[] names= person.get("name").toString().split("-"); return Arrays.stream(names); }).collect(toList()); System.out.println(list1); }
輸出:
由圖可見,將list中的對象進行處理後,將整合爲新的list。