安全创建 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<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        DataUtils.asStream(list).forEach(System.out::println);

        Map<Integer, String> 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 <T>
     * @return
     */
    public static <T> Stream<T> asStream(Collection<T> collection) {
        return collection == null ? Stream.empty() : collection.stream();
    }

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

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

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

}

Reference

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容