Stream常用方法

Stream流

1、使用步骤

  1. 获取stream流
  2. 调用stream流的各种方法对数据进行处理、计算
  3. 获取处理的结果,遍历、统计、收集到一个新的集合中并且返回

一) 获取stream流的方法

package com.zpark.it.stream02;

import javax.lang.model.element.VariableElement;
import java.nio.channels.NonWritableChannelException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Title: StreamDemo1
 * @Author Charles
 * @Package com.zpark.it.stream02
 * @Date 2023/10/5 17:01
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        //1、如何获取List集合的stream流
        List<String> names= new ArrayList<>();
        Collections.addAll(names,"张三丰","张无忌","张全蛋","小强");
        Stream<String> stream = names.stream();

        //2、如何获取Set集合Stream流
        Set<String> set=new HashSet<>();
        Collections.addAll(set,"李四","李五","张流");
        Stream<String> stream1 = set.stream();
        stream1.filter(s->s.startsWith("李")&&s.length()==2)
                        .forEach(s -> System.out.println(s));


        //3、如何获取Map集合的Stream流
        Map<String,Double> map=new HashMap<>();
        map.put("张德华",170.0);
        map.put("张小风",182.0);
        map.put("小二",80.0);
        map.put("张小",188.0);
        Set<String> keys = map.keySet();
        Stream<String> ks = keys.stream();

        Collection<Double> values = map.values();
        Stream<Double> vs = values.stream();

        Set<Map.Entry<String, Double>> entries = map.entrySet();
        Stream<Map.Entry<String, Double>> kvs = entries.stream();
        kvs.filter(e->e.getKey().contains("张")).forEach(e-> 			                     System.out.println(e.getKey()+"===>"+e.getValue()));


        //4、然后获取数据的stream流
        String[] names1={"张三","历史"};
        Stream<String> s1 = Arrays.stream(names1);
        Stream<String> s2 = Stream.of(names1);

    }
}

二)Stream流常见的中间方法

package com.zpark.it.stream02;

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

/**
 * @Title: StreamDemo02 stream流常用API
 * @Author Charles
 * @Package com.zpark.it.stream02
 * @Date 2023/10/5 19:40
 */
public class StreamDemo02 {
    public static void main(String[] args) {
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores, 88.3, 100.3, 123.2, 99.3, 10.2);
        //需求1:找出成绩大于等于60分的数据,并且升序后,再输出

        scores.stream().filter(s -> s >= 60).sorted().forEach(s -> System.out.println(s));


        List<Student> students = new ArrayList<>();
        Student s1 = new Student("蜘蛛精", 26, 170.9);
        Student s2 = new Student("蜘蛛精", 27, 172.9);
        Student s3 = new Student("紫霞", 26, 171.9);
        Student s4 = new Student("至尊宝", 23, 180.9);
        Student s5 = new Student("牛魔王", 28, 182.9);
        Collections.addAll(students, s1, s2, s3, s4, s5);
        //需求2:找出年龄大于等于23岁,且年龄小于等于27岁的学生,并且按年龄降序输出
        students.stream().filter(s -> s.getAge() >= 23 && s.getAge() <= 27)
                .sorted((o1, o2) -> o2.getAge() - o1.getAge())
                .forEach(s -> System.out.println(s));

        System.out.println("=================");
        //需求3:取出身高最高的前三名同学,并输出
        students.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight()))
                .limit(3).forEach(s -> System.out.println(s));
        System.out.println("--------------------------------------");
        //需求4:取出身高倒数的两名同学,并输出

        students.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight()))
                .skip(students.size() - 2).forEach(s -> System.out.println(s));

        //需求5:找出身高高于168的学生叫什么名字,要求去除重复的名字,再输出
        students.stream().filter(s -> s.getHeight() > 168)
                .map(s -> s.getName()).distinct().forEach(s -> System.out.println(s));
        //distinct去重复,自定义类型的对象,(希望内容一样就认为重复,需要重写hashCode,equals方法)
        
        
        Stream<String> st1 = Stream.of("张三", "李四", "王五");
        Stream<String> st2 = Stream.of("张三1", "李四2", "王五3");
        Stream<String> all = Stream.concat(st1, st2);
        all.forEach(System.out::println);
    }
   }
}

三)Stream流常见的终结方法

package com.zpark.it.stream02;

import java.net.SocketTimeoutException;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @Title: StreamDemo03
 * @Author Charles
 * @Package com.zpark.it.stream02
 * @Date 2023/10/5 20:28
 */
public class StreamDemo03 {
    public static void main(String[] args) {
        List<Student> students=new ArrayList<>();
        Student s1 = new Student("蜘蛛精", 26, 170.9);
        Student s2 = new Student("蜘蛛精", 27, 172.9);
        Student s3 = new Student("紫霞", 26, 168.9);
        Student s4 = new Student("至尊宝", 23, 180.9);
        Student s5 = new Student("牛魔王", 28, 182.9);
        Collections.addAll(students, s1, s2, s3, s4, s5);
       //需求1:请找出身高超过168的同学有几人
        long count = students.stream().filter(s -> s.getHeight() > 168).count();
        System.out.println(count);

        //需求2:找出身高最高的学生对象,并输出
        Student student = students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(student);

        //需求3:找出身高最矮的学生对象,并输出
        Student student1 = students.stream().min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(student1);
        System.out.println("------------------------");
        //需求4:找出身高高于170的学生对象,并放到一个新集合中去返回
        List<Student> students2 = students.stream().filter(s -> s.getHeight() > 170).collect(Collectors.toList());
        System.out.println(students2);
        System.out.println("+++++++++++++++++++++");
        Set<Student> students3 = students.stream().filter(s -> s.getHeight() > 170).collect(Collectors.toSet());
        System.out.println(students3);
        System.out.println("--------++++++++++++++++++++++");
        //需求5:找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个map集合返回
        Map<String, Double> map = students.stream().filter(s -> s.getHeight() > 170)
                .distinct().collect(Collectors.toMap(s -> s.getName(), s -> s.getHeight()));
        System.out.println(map);

        //需求6:存入到一个学生对象数组中去
        Student[] arr = students.stream().filter(s -> s.getHeight() < 170).toArray(len->new Student[len]);
        System.out.println(Arrays.toString(arr));

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值