Stream ApI--3.map,flatmap

来源:互联网 发布:电脑指令mac地址修改 编辑:程序博客网 时间:2024/05/22 17:04

1.Map(中间操作)

接收Lambda表达式,对每一个元素转换成其他形式或提前信息,接受一个函数作为参数,该函数会被用到每个元素上,并将其映射成一个新的元素。

map的参数十一个Function<T,R>接口,简单的说map就是类型转换 T->R,该接口的抽象函数  R  apply(T t) 

比如讲一个字符串的小写转大写

再比如对员工数组中的每个成员工资  这里可以利用方法引用

Stream.of("aaa","bbb","ccc","ddd").map((s)->s.toUpperCase()).forEach(System.out::println);System.out.println("--------------------------");employees.stream().map(Employee::getSalary).forEach(System.out::println);

AAABBBCCCDDD--------------------------6666.669999.993333.337777.777777.777777.775555.55


map返回的十一个流,所以有如下情况

public static Stream<Character> filterChar(String str){List<Character> character=new ArrayList();for(Character c:str.toCharArray()){character.add(c);}return character.stream();}

employees.stream().map(Employee::getSalary).forEach(System.out::println);Stream<Stream<Character>> str=Stream.of("abc","defg","higjk").map(Run::filterChar);//map:将每个字符串转换成含字符信息的流,而map本身返回一个流,所以最终是Stream<Stream<Character>>的结构str.forEach((s)->{//对于Stream str 它的每个元素是Stream<Character>,所以还需在遍历s.forEach(System.out::println);});


2.flatMap

flatMap 接收一个Lambda函数,将每个值转换成另一个流,然后将所有的流连起来

Stream.of("abc","defg","higjk").flatMap(Run::filterChar).forEach(System.out::println);

3.map和flatMap

二者的关系有点像Collection一些列集合类中的add和addAll,比如list1  list2,  如果list1.add(list2) 则list2整个集合作为一个元素添加到list1中, list1.addAll(list2)是将list2中的各个元素添加到list1中

如果输入参数是流的话,map将处理过的流添加到流中,而flatMap是将流中的数据添加到流中


4.sorted()排序

sorted()----自然排序

sorted(Comparator com)----定制排序

Stream.of("bbb","bbb","ccc","aaa","ddd").map((s)->s.toUpperCase()).sorted().forEach(System.out::println);System.out.println("--------------------------");employees.stream().sorted((e1,e2)->{if(e1.getAge()==e2.getAge()){return e1.getName().compareTo(e2.getName());}else{return Integer.compare(e1.getAge(), e2.getAge());}}).forEach(System.out::println);



0 0
原创粉丝点击