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());
}
}