Stream流体系

 

  

 

  用旧方法:

 

package it.gao.stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<String> name=new ArrayList<>();
        Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
        System.out.println(name);

        //姓张的集合
        List<String> zhangname=new ArrayList<>();
        for (String s : name) {
            if (s.startsWith("张")){
                zhangname.add(s);
            }
                    }
        System.out.println(zhangname);

        List<String> zhangThreeName=new ArrayList<>();
        for (String s : zhangname) {
            if (s.length()==3){
                zhangThreeName.add(s);
            }

        }
        System.out.println(zhangThreeName);
    }
}

Stream流实现:

public class Demo {
    public static void main(String[] args) {
        List<String> name=new ArrayList<>();
        Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
        System.out.println(name);


  name.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(s -> System.out.println(s));
    }
}

 

获取stream流的方法:

public class Demo2 {
    public static void main(String[] args) {
        //collection集合获取stream流
        Collection<String> name=new ArrayList<>();
        Stream<String> stream = name.stream();

        //Map集合获取数组
        Map<String,Integer> maps=new HashMap<>();
        //  方法一
        Stream<String> stream1 = maps.keySet().stream();
        Stream<Integer> stream2 = maps.values().stream();
        //方法二
        Stream<String> keyAndValus=maps.keySet().stream();



        int[] arrs={1,2,3,4,5};
        Arrays.stream(arrs);
        Stream<int[]> arrs1 = Stream.of(arrs);

    }
}

 

Stream流的常用API:

  

 当前面的参数和打印的参数一样时才可以这样简化:

 

public class Demo3 {
    public static void main(String[] args) {
        List<String> name=new ArrayList<>();
        Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
        System.out.println(name);
        long longs = name.stream().filter(s -> s.startsWith("张")).count();
        System.out.println(longs);
        name.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        System.out.println("============");
        name.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
        System.out.println("============");
        name.stream().filter(s -> s.startsWith("张")).skip(1).forEach(s -> System.out.println(s));
        System.out.println("============");
        name.stream().map(s -> new Student(s)).forEach(student -> System.out.println(student));

        Stream<String> list = name.stream().filter(s -> s.startsWith("张"));
        Stream<String> list2 = Stream.of("java1", "java2");
        Stream<String> concat = Stream.concat(list, list2);
        System.out.println("============");
        concat.forEach(s -> System.out.println(s));

    }
}

在Stream流中无法直接修改集合或者数组的数据,只能用原生API来修改

 

Stream流的综合应用:

package it.gao.stream;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class Test4 {
    public  static double allmoney;


    public static void main(String[] args) {
        List<Employee> one =new ArrayList<>();
        one.add(new Employee("猪八戒","男",20000,5000,"无"));
        one.add(new Employee("孙悟空","男",15000,5000,"无"));
        one.add(new Employee("汤森","男",10000,5000,"被打"));
        one.add(new Employee("白龙马","男",5000,5000,"被打"));


        List<Employee> two =new ArrayList<>();
        one.add(new Employee("张无忌","男",15000,6000,"无"));
        one.add(new Employee("赵敏","男",14000,5000,"无"));
        one.add(new Employee("张三丰","男",10000,5000,"被打"));
        one.add(new Employee("向左使","男",5000,5000,"被打"));
        //第一组最高工资员工信息
        Employee employee = one.stream().max((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()
        ).get();
        System.out.println(employee);
        //第一组最高工资员工被封装
        Topperformer topperformer = one.stream().max((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()
        ).map(o -> new Topperformer(o.getName(), o.getSalary() + o.getBonus())).get();
        System.out.println(topperformer);

          //第二组最高工资员工信息
//        Employee employee1 = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary()) + e2.getBonus()).get();




        //第二组最高工资员工被封装
//        Topperformer topperformer1 = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary()) + e2.getBonus()).map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get();
//        System.out.println(topperformer1);

        Stream<Employee> t1 = one.stream();
        Stream<Employee> t2 = two.stream();
        Stream<Employee> t3 = Stream.concat(t1, t2);

        t3.sorted((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()).skip(1).limit(one.size()+two.size() -2).forEach(e-> {
            allmoney+=(e.getSalary()+e.getBonus());

        });
        BigDecimal bigDecimal=BigDecimal.valueOf(allmoney);
        BigDecimal bigDecimal2=BigDecimal.valueOf(one.size()+two.size() -2);
        System.out.println("平均工资是:" + bigDecimal.divide(bigDecimal2, 2));


    }
}

 Stream流的收集:

Stream也是一种手段,不是目的

 

 

 注意:流只能使用一次

 

 ​​​​​​​

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值