Java StreamAPI使用

目录

一、Stream 

二、中间操作

1.筛选与切片操作

2.映射

3.排序

三、终止操作

1.匹配与查找

2.归约

3.收集


一、Stream 

1.Stream关注的是对数据的运算,与CPU打交道,集合关注的是数据的存储,与内存打交道

2.Stream不会存储元素

               不会改变源对象,相反,他们会返回一个持有结果的新Stream

               操作是延迟执行的

3.执行流程:实例化-》中间操作-》终止操作

4.中间操作链,用于对数据源进行处理 ,一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用

二、中间操作

1.筛选与切片操作

建立数据Person,便于后续操作。

package StreamAPI;


import java.util.Objects;

public class Friends {
    private String name;
    private int age;

    public Friends() {
    }

    public Friends(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Friends{name = " + name + ", age = " + age + "}";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Friends friends = (Friends) o;
        return age == friends.age && Objects.equals(name, friends.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
package StreamAPI;


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

public class FriendsData {
    public static List<Friends> getlist(){
        List<Friends> list=new ArrayList<>();
        list.add(new Friends("李博",23));
        list.add(new Friends("蒲汶文",21));
        list.add(new Friends("邱志豪",24));
        return list;
    }
}
@Test
    public void test01(){
        List<Friends>list=FriendsData.getlist();
        Stream<Friends>stream=list.stream();
        //按条件查询
        stream.filter(e->e.getAge()>23).forEach(System.out::println);
        System.out.println("___________________________________");
        //截断流,使其不超过给定数量
        list.stream().limit(2).forEach(System.out::println);
        System.out.println("___________________________________");
        //跳过元素,返回一个除去前n个元素的流
        list.stream().skip(2).forEach(System.out::println);
        System.out.println("___________________________________");
        //筛选
        list.add(new Friends("邱志豪",35));
        list.add(new Friends("邱志豪",35));
        list.stream().distinct().forEach(System.out::println);
    }

2.映射

package StreamAPI;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;
//中间操作
//映射
public class demo2 {
    //map()接收一个函数作为参数,将元素转换成其他形式或提取信息
    @Test
    public void test01(){
        List<String> list = Arrays.asList("aa","bb");
        System.out.println(list);
        Stream<String> stream = list.stream();
        stream.map(str->str.toUpperCase()).forEach(System.out::println);
    }
    //flatmap()接收一个函数作为参数,将流中的每个值都换成一个流,然后把所有流返回
    @Test
    public void test02(){
        List<String> list = Arrays.asList("aa","bb","cc");
        Stream<String> stream = list.stream();
        stream.flatMap(demo2::function).forEach(System.out::println);
    }
    public static Stream<Character> function(String str){
        List<Character>list=new ArrayList<>();
        for (Character c : str.toCharArray()) {
            list.add(c);
        }
        return list.stream();
    }


}

3.排序

    @Test
    public void test03(){
        //自然排序
        List<Integer>list=Arrays.asList(12,43,45,23,1);
        Stream<Integer> stream = list.stream();
        stream.sorted().forEach(System.out::println);
        //定制排序
        List<Friends> getlist = FriendsData.getlist();
        Stream<Friends> stream1 = getlist.stream();
        stream1.sorted((o1,o2)-> o1.getAge()- o2.getAge()).forEach(System.out::println);
    }

 

三、终止操作

1.匹配与查找

aLLMatch(Predicate p)—检查是否匹配所有元素。
anyMatch( Predicate p)—检查是否至少匹配一个元素。

noneMatch( Predicate p)—-检查是否没有匹配的元素。findFirst—-返回第一个元素
findAny—返回当前流中的任意元素count—返回流中元素的总个数
max ( Comparator c)—返回流中最大值
min(Comparator c)—返回流中最小值
forEach(Consumer c)—内部迭代

    @Test
    public void test(){
        List<Friends> getlist = FriendsData.getlist();
        Stream<Friends> stream = getlist.stream();
        boolean b = stream.allMatch(e -> e.getAge() > 10);
        System.out.println(b);
    }

 

2.归约

    //reduce():可以将流中的元素反复结合起来,得到一个值。
    @Test
    public void test(){
        List<Integer>l1=Arrays.asList(1,2,3,4,5,6);
        Stream<Integer> stream = l1.stream();
        Integer reduce = stream.reduce(0, Integer::sum);
        System.out.println(reduce);

        List<Friends> l2 = FriendsData.getlist();
        Stream<Friends> stream1 = l2.stream();
        Stream<Integer> integerStream = stream1.map(e -> e.getAge());
        Optional<Integer> reduce1 = integerStream.reduce((a, b) -> a + b);
        System.out.println(reduce1);

    }

3.收集

   //收集
    @Test
    public void test02(){
        List<Friends> l2 = FriendsData.getlist();
        Stream<Friends> stream1 = l2.stream();
        List<Friends> collect = stream1.collect(Collectors.toList());
        System.out.println(collect);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值