[代码解析001] 函数式编程 Java 1.8 新添加的Stream API
1、代码片段
# 查询参数为 id 的 xxxContainer 列表的个数
# ids 为 String 类型的数组
int count = (int) Arrays.stream(ids).map(id ->
xxxContainerService.list(new QueryWrapper<xxxContainer>().eq("xxx_id", id)))
.filter(containers -> !containers.isEmpty()).count();
2、涉及源码
/**
* Returns a sequential {@link Stream} with the specified array as its
* source.
*
* @param <T> The type of the array elements
* @param array The array, assumed to be unmodified during use
* @return a {@code Stream} for the array
* @since 1.8
*/
public static <T> Stream<T> stream(T[] array) {
return stream(array, 0, array.length);
}
3、涉及知识点
Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中
// 使用 java 7 排序
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}
// 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.stream().filter(string -> string.isEmpty()).count();
count() 方法,用于计数,返回 long 类型。

浙公网安备 33010602011771号