Java中Stream用法

获取 List 中大于 50 的数据

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTest {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,51,52,53);
        List<Integer> filterList = list.stream().filter(x -> x>50).collect(Collectors.toList());
        fliterList.forEach(System.out::println);
    }
}

四种 Stream 创建方式

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamTest {
    public static void main(String[] args) {
        //创建Stream
        //1、通过Collection系列集合提供的stream()或parallelStream()
        List<String> list=new ArrayList<>();
        Stream<String> stream = list.stream();

        //2、通过Arrays中的静态方法stream()获取
        Integer[] integers=new Integer[10];
        Stream<Integer> stream1 = Arrays.stream(integers);

        //3、通过Stream类中的静态方法of()
        Stream<Integer> stream2 = Stream.of(integers);

        //4、迭代创建
        Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2);
        iterate.limit(5).forEach(System.out::println);
    }
}

将年龄超过 30 岁的过滤出来

//过滤出年龄大于30岁的人
Stream<User> userStream = list.stream().filter((e) -> e.getAge() >= 30);
userStream.forEach(System.out::println);
public class StreamTest {
    public static void main(String[] args) {
        List<User> list= Arrays.asList(
                new User("javayz",23,"male"),
                new User("张三",25,"male"),
                new User("李四",30,"female"),
                new User("王五",33,"female"),
                new User("王五",33,"female")
        );
    }
}
public class User {
    private String name;
    private int age;
    private String sex;
    public User(String name,Integer age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "name:"+name+" age:"+age+" sex:"+sex;
    }
}

limit 截断使元素不超过给定的数量

//对取出来的数据只展示一条
Stream<User> userStream = list.stream()
        .filter((e) -> e.getAge() >= 30)
        .limit(1);
userStream.forEach(System.out::println);

skip 跳过集合中的前 n 个数

Stream<User> userStream = list.stream().skip(2);
userStream.forEach(System.out::println);

map 通过 Function 接口对 stream 中的每个数据处理后返回新的数据,比如下面这段代码将所有的英文改为大写

List<String> list1=Arrays.asList("aa","bb","cc");
Stream<String> stringStream = list1.stream().map((str) -> str.toUpperCase());
stringStream.forEach(System.out::println);
flatmap

flatmap 通过 Function 接口多个 Stream 流合并成一个 Stream

比如把一个集合 {"aa","bb","cc"} 变成 {'a','a','b','b','c','c'} ,使用 map 就需要这样:

List<String> list1=Arrays.asList("aa","bb","cc");
Stream<Character> characterStream = list1.stream().flatMap((str) -> {
    List<Character> characters = new ArrayList<>();
    for (Character ch : str.toCharArray()) {
        characters.add(ch);
    }
    return characters.stream();
});
characterStream.forEach(System.out::println);

按年龄进行排序

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamTest {
    public static void main(String[] args) {
        List<User> list= Arrays.asList(
            new User("张三",25,"male"),
            new User("javayz",23,"male"),
            new User("李四",30,"female"),
            new User("王五",33,"female")
        );

        Stream<User> sorted = list.stream().sorted((e1, e2) -> {
            return e1.getAge() == e2.getAge() ? 0 : e1.getAge() > e2.getAge() ? 1 : -1;
        });
        sorted.forEach(System.out::println);
    }
}

allMatch 检查是否匹配所有元素,返回 boolean 类型的结果,

boolean male = list.stream().allMatch((e) -> e.getSex().equals("male"));
System.out.println(male);

anyMatch 检查是否至少匹配一个元素

boolean male = list.stream().anyMatch((e) -> e.getSex().equals("male"));
System.out.println(male);

noneMatch 检查是不是没有元素能够匹配指定的规则

boolean male = list.stream().noneMatch((e) -> e.getSex().equals("male"));
System.out.println(male);

count 返回当前流中的元素总个数

long count = list.stream().count();
System.out.println(count);

max 返回当前流中的最大值

Optional<User> max = list.stream().max((e1, e2) -> {
    return Integer.compare(e1.getAge(), e2.getAge());
});
System.out.println(max.get());

min 返回当前流中的最小值,使用方法和 max 一致

Optional<User> min = list.stream().min((e1, e2) -> {
    return Integer.compare(e1.getAge(), e2.getAge());
});
System.out.println(min.get());

reduce 将流中的元素反复结合起来,得到一个值

List<Integer> list=Arrays.asList(1,2,3,4,5,6,7,8,9);
//从第0个元素开始,对list求和
Integer reduce = list.stream().reduce(0, (x, y) -> x + y);
System.out.println(reduce);

collection 将流中的数据接收成其他的形式

List<String> collect = list.stream().map((e) -> e.getName()).collect(Collectors.toList());
System.out.println(collect);

每个班成绩大于 80 分的学生名单

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
            new Student("张三", 88, 1001),
            new Student("李四", 79, 1001),
            new Student("王五", 83, 1001),
            new Student("孙三", 90, 1002),
            new Student("赵四", 66, 1002),
            new Student("韩五", 77, 1002)
        );

        Map<Integer,List<Student>> result = students.stream()
            .filter(student->student.getGrade()>80)
            .collect(Collectors.groupingBy(Student::getClassNo));

        System.out.println(result);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值