一、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。