这是第二章

本文介绍了Java Stream API的基础操作,如map函数用于元素转换,flatMap用于流内流的合并。通过实例演示了如何将字符串列表转换为大写并打印,以及如何将字符流转换为Map和逐个提取。此外,讲解了map与flatMap的区别,以及如何使用sorted和collect方法进行排序和数据聚合。
摘要由CSDN通过智能技术生成

这是第二章,0基础可以看我第一章的Stream流
Stream基础
映射Map和flatMap
map映射 接收一个Lambda,将元素转换为其他形式 接收一个函数或者参数 该函数会被应用到每个元素上
先是Map映射

		List<String> list = Arrays.asList("aaa,", "bbb,", "ccc", "ddd");
		//将每个元素转换成大写 并且遍历
		list.stream().map((str) -> str.toUpperCase())
              .forEach(System.out::println);

将每一个元素提取出来 映射到Map上
然后问题来了 怎么把上边数组里边的元素 怎么一个个单独的提出来 再放到集合中

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

然后遍历集合

 Stream<Stream<Character>> stream = list.stream().map(Stream02_::filterCharacter);
        stream.forEach((str)->{
            str.forEach(System.out::println);
        });

flatMap接收一个函数作为参数 将流中每个值都换成另一种流 然后把所有的流连接成流

Stream<Character> stream1 = list.stream().flatMap(Stream02_::filterCharacter);
        stream1.forEach(System.out::println);
  • 总结 map和 flatMap区别
    map是把{ {“a”,“a”,“a”,“b”,“b”,“b”} }aaabbb流整成一个大流 把{aaa}放入map中
    flatMap是把{“a”,“a”,“a”,“b”,“b”,“b”}整合成了一个流 是把{aaa}中的a的元素放到flatMap
    还记得集合中由add和addall方法么
	 List<String> list = Arrays.asList("aaa,", "bbb,", "ccc", "ddd");
        ArrayList<Object> list1 = new ArrayList<>();
        list1.add(11);
        list1.add(22);
        //list1.addAll(list);
        list1.add(list);
        System.out.println(list1);

这个是list

   ![这个是listall](https://img-blog.csdnimg.cn/12ca2904c95d45188fa1480bc9458f19.png#pic_center)

排序
sorted()排序 自然排序Comparable 因为String实现再自然排序 Double Integer等等

 	List<String> list = Arrays.asList("aaa","bbb","ccc","ddd","eee");
        	list.stream().sorted().forEach(System.out::println);

sorted(Comparator)排序 定制排序

emp.stream().sorted((e1,e2)->{
            if (e1.getAge()==e2.getAge()){
                return e1.getName().compareTo(e2.getName());
            }else {
                return -e1.getAge().compareTo(e2.getAge());
            }

        }).forEach(System.out::println);

按照年龄进行排序 如果年龄相同就按照名字

/*
allMatch-检查是否匹配所有元素
anyMatch-检查是否匹配至少一个元素
noneMatch-检查是否没有匹配的所有元素
 findFirst-查找第一个元素
 findAny-查找当前流中的任意元素
 count-返回流的总数
 max-返回流的最大值
 min-返回流的最小值
 */       
@Test
    public void Test1() {
        //allMatch-检查是否匹配所有元素
        boolean b1 = employee.stream()
                .allMatch((e) -> e.getStatus().equals(Employee.Status.BUSY));
        System.out.println(b1);
        System.out.println("===================================");
        //anyMatch-检查是否匹配至少一个元素
        boolean b2= employee.stream()
                .anyMatch((e)->e.getStatus().equals(Employee.Status.BUSY));
        System.out.println(b2);
        System.out.println("===================================");
        //noneMatch-检查是否没有匹配的所有元素
        boolean b3=employee.stream()
                .noneMatch((e)->e.getStatus().equals(Employee.Status.FREE));
        System.out.println(b3);
        System.out.println("===================================");
        //findFirst-查找第一个元素 默认从低到高
        Optional<Employee> first = employee.stream().sorted((e1, e2) ->
               Double.compare(e1.getSalary(), e2.getSalary())
        ).findFirst();
        System.out.println("first = " + first);
        System.out.println("===================================");
        //findAny-查找当前流中的任意元素
        Optional<Employee> any = employee.stream().filter((e) -> e.getStatus().equals(Employee.Status.VOCATION)).findAny();
        System.out.println(any.get());
        System.out.println("===================================");
        //count-返回流的总数
        long count = employee.stream().filter((e) -> e.getStatus().equals(Employee.Status.VOCATION)).count();
        System.out.println(count);
        // max-返回流的最大值
         System.out.println("===================================");
        Optional<Employee> max = employee.stream().max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
        System.out.println(max.get());
        System.out.println("===================================");
       employee.stream().map(Employee::getSalary).min(Double::compare);

    }    

归约T reduce(T identity, BinaryOperator accumulator) / reduce(BinaryOperator accumulator)
可以将流中的元素反复结合起来 得到一个值
先把100赋值给x y=1 会得到101 在去加2 得到103 以此类推 加到9

List<Integer>list=Arrays.asList(1,2,3,4,5,6,7,8,9);
        Integer sum= list.stream().reduce(100,(x,y)->x+y);
        System.out.println(sum);
        System.out.println("=========================");
        //需求工资的总和 类::静态方法名
        Optional<Double> reduce = employee.stream().map(Employee::getSalary).reduce(Double::sum);
        System.out.println(reduce.get());   
collect
List<String> list= employee.stream()
            .distinct()
            .map(Employee::getName)
            .collect(Collectors.toList());

把employee转换成list集合

Map<String, Double> collect = employee.stream().collect(Collectors.toMap(Employee::getName, Employee::getSalary));
        System.out.println(collect);

把 employee转换成map集合 根据Name获取Salary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值