Java 集合之Stream流

Stream的作用

结合了Lambda表达式,简化集合、数组的操作

Stream的使用流程

① 先得到一条Stream流(流水线),并把数据放上去
主要方法:

获取方式 方法名 说明
单列集合 集合名.stream() Collection中的默认方法
双列集合 无法直接使用stream流,可以先转成单例
数组 public static <\T> Stream<\T> stream(T[] array) Arrays工具类中的静态方法
一堆零散数据 public static <\T> Stream<\T> of(T…values) Stream接口中的静态方法

② 使用中间方法对流水线上的数据进行操作
主要方法

filter():过滤 ,limit():获取前几个元素,skip():跳过前几个元素
distinct():元素去重,concat():合并两个stream流,map():转换流中的数据类型

注意事项

1.中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
2.修改Stream流中的数据,不会影响原来集合或者数组中的数据

③ 使用终结方法对流水线上的数据进行操作
主要方法

名称 说明
void forEach() 遍历
long count() 统计
toArray() 收集流中的数据,放到数组中
collect(Collector collector) 示例:collect(Collector.toList)、collect(Collector.toSet)、collect(Collector.toMap) 收集流中的数据,放到集合中

几个案例演示

案例一:

    数据过滤
    过滤奇数,保留偶数
    并将结果保存下来

代码演示:

package com.liming.stream;

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

public class Demo02 {
    public static void main(String[] args) {
        /*
         * 数据过滤
         * 过滤奇数,保留偶数
         * 并将结果保存下来
         * */
        //定义集合,添加数据
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        //过滤并保存数据
        List<Integer> newList = list.stream()
                .filter(i -> i % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(newList);
    }
}

案例二:

创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
“zhangsan,23”
“lisi,24”
“wangwu,25”
保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值

代码演示:

package com.liming.stream;

import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Demo03 {
    public static void main(String[] args) {
        /*
         * 创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
         * "zhangsan,23"
         * "lisi,24"
         * "wangwu,25"
         * 保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值
         * */
        ArrayList<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");
        //Collectors.toMap(键的规则,值的规则)
        /*list.stream()
                .filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(new Function() {
                    @Override
                    public String apply(String s) {
                        return s.split(",")[0];
                    }
                }, new Function() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s.split(",")[1]);
                    }
                }));*/

        //lambda表达式简写
        Map<String, Integer> map = list.stream()
                .filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(
                        s -> s.split(",")[0],
                        s -> Integer.parseInt(s.split(",")[1])));
        System.out.println(map);
    }
}

你可能感兴趣的:(java,开发语言)