[代码解析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 类型。

posted @ 2022-06-29 18:57  Code7Rain  阅读(29)  评论(0)    收藏  举报