收集 Stream 结果

收集 Stream 结果

集合和流虽然具有一些相似性,但有不同的目标。

集合主要是对其中的元素进行管理和访问。

而流不提供直接访问或操纵其元素的功能,

//流的出现只是对集合中的元素进行声明性地描述或对元素进行计算等操作。

//而且流只能进行一次操作,即调用非终结方法或终结方法操作一次。

所以对流操作完成之后,有时需要将其结果进行收集,获取对应的集合、数组等。

收集到集合中

Stream 流提供 collect 方法,
其参数需要一个 java.util.stream.Collector接口对象来指定收集到哪种集合中。

java.util.stream.Collectors 类提供一些方法,可以作为 Collector 接口的实例:

Collectors 类提供一些方法 说明
public static  Collector> toList() 转换为 List 集合
public static  Collector> toSet() 转换为 Set 集合

收集到集合的示例

 案例需求:将一个字符串组成的流对象,调用 collect 方法,分别转成 List 和 Set 集合。

注意:流只能收集一次

 案例代码:

public static void main(String[] args) {
Stream<String> stream = Stream.of("10", "20", "30", "40", "50");
 //只能收集 1 次
// List<String> collect = stream.collect(Collectors.toList());
// System.out.println(collect);
 Set<String> stringSet = stream.collect(Collectors.toSet());
 System.out.println(stringSet);
}
收集到数组中
Stream接口中定义的方法

Object[] toArray()

返回一个包含流中元素的数组,返回值类型是Object[]的数组

收集到数组的示例

将一个流转成Object数组

public void testCollectArray() {

        Stream<String> stream = Stream.of("Jack","Rose","Hello","Select","Insert");

        //转成一个Object数组

        Object[] objects = stream.toArray();

        for (int i = 0; i < objects.length; i++) {

            System.out.println(objects[i]);

        }
    }

Stream接口中定义的方法

A[] toArray(IntFunction<A[]> generator)

返回包含此流元素的数组,使用提供的生成器函数分配返回的数组

有了Lambda和方法引用之后,可以使用toArray方法的另一种重载形式传递一个IntFunction<A[]>的函数,

继而从外面指定泛型参数。这是IntFunction接口的源代码:

@FunctionalInterface
public interface IntFunction<R> {
    /**
     * 使用给定的整数变量,通过函数计算出结果
     */
    R apply(int value);

}

IntFunction接口中的方法:

R apply(int value)

传入一个整数变量,得到另一种类型的结果。类似于Function的接口,甚至更简单。

IntFunction的R apply(int value)方法只能传入整数,而Function的R apply(T t)方法可以传入任意类型。

案例说明:

1) 创建一个由字符串组成的流

2) 调用toArray()方法生成一个String[]数组。

3) 使用Lambda和数组方法引用的写法分别写出来

4) 输出转换后的数组

@Test
public void testCollectArray() {

    Stream<String> stream = Stream.of("Jack","Rose","Hello","Select","Insert");

    /*//转成一个Object数组

    Object[] objects = stream.toArray();

    for (int i = 0; i < objects.length; i++) {

        System.out.println(objects[i]);

    }*/

    //R apply(int value),  n表示数组的长度

    //String[] strings = stream.toArray(n -> new String[n]);

    String[] strings = stream.toArray(String[]::new);

    for (String string : strings) {

        System.out.println(string);

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值