Java

安全创建 Java Stream

2020-03-07  本文已影响0人  空之古城

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

安全创建 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

上一篇 下一篇

猜你喜欢

热点阅读