安全创建 Java Stream

Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物,在这里沉淀我对下面三个语言特性结合使用的一些思考和心得:

  • Java Stream
  • Lambda 表达式
  • fork/join 线程模型

安全创建 Java Stream

使用示例:

package bigcrab;

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

/**
 * @author sky
 * @date 2020/3/5
 */
public class TestCreateStream {

    public void run() {
        List list = Arrays.asList(1, 2, 3, 4, 5);
        DataUtils.asStream(list).forEach(System.out::println);

        Map map = null;
        DataUtils.asStream(map).forEach(System.out::println);
    }
}

DataUtils 类定义:

package bigcrab;

import java.util.Collection;
import java.util.Map;
import java.util.stream.Stream;

/**
 * @author sky
 * @date 2020/3/5
 */
public class DataUtils {

    /**
     * 基于 Collection 安全地获得一个 stream 对象
     *
     * @param collection
     * @param 
     * @return
     */
    public static  Stream asStream(Collection collection) {
        return collection == null ? Stream.empty() : collection.stream();
    }

    /**
     * 基于 Map 安全地获取一个 stream 对象
     *
     * @param map
     * @param 
     * @param 
     * @return
     */
    public static  Stream> asStream(Map map) {
        if (map == null || map.size() == 0) {
            return Stream.empty();
        }
        return asStream(map.entrySet());
    }

    /**
     * 基于 Collection 安全地获得一个并行的 stream 对象
     *
     * @param collection
     * @param 
     * @return
     */
    public static  Stream asParallelStream(Collection collection) {
        return collection == null ? Stream.empty() : collection.parallelStream();
    }

    /**
     * 基于 Map 安全地获得一个并行的 stream 对象
     *
     * @param map
     * @param 
     * @param 
     * @return
     */
    public static  Stream> asParallelStream(Map map) {
        if (map == null || map.size() == 0) {
            return Stream.empty();
        }
        return asParallelStream(map.entrySet());
    }

}

Reference

  • Java 8 中的 Streams API 详解
  • Java 8 Stream Tutorial

你可能感兴趣的:(安全创建 Java Stream)