当前位置: 首页 > 知识库问答 >
问题:

函数类型同余lambda表达式在Java 8中的使用

尹俊贤
2023-03-14

我对

Stream.collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)

方法。

方法签名包括双消费者类型的参数。双消费者功能接口定义了一个函数方法accept(Object,Object)。据我所知,我现在可以使用任何与此函数接口一致的lambda表达式。

但是流中提到的示例。收集JavaDoc例如。

 List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

我不明白为什么ArrayList。add(E E)(单参数)与双消费者一致。accept(T T,U U)方法(两个参数),可以用作collect方法中的累加器函数。

如你所见,我显然缺乏理解,感谢任何解释。

共有2个答案

易元青
2023-03-14

添加实际上有2个参数。对其调用添加方法和添加参数的数组列表对象。

ArrayList::add等价于(list,元素)-

巢权
2023-03-14

累加器双消费者的两个参数是(1)列表本身和(2)要添加到列表中的项。这是:

List<String> asList = stringStream.collect(
    ArrayList::new,
    ArrayList::add,
    ArrayList::addAll
);

相当于:

List<String> asList = stringStream.collect(
    () -> new ArrayList<>(),
    (list, item) -> list.add(item),
    (list1, list2) -> list1.addAll(list2)
);

这将得到与此相同的结果:

List<String> asList = stringStream.collect(
    new Supplier<ArrayList<String>>() {
        @Override
        public ArrayList<String> get() {
            return new ArrayList<>();
        }
    },

    new BiConsumer<ArrayList<String>,String>() {
        @Override
        public void accept(ArrayList<String> list, String item) {
            list.add(item);
        }
    },

    new BiConsumer<ArrayList<String>,ArrayList<String>>() {
        @Override
        public void accept(ArrayList<String> list1, ArrayList<String> list2) {
            list1.addAll(list2);
        }
    }
);
 类似资料:
  • 1 Java8 Lambda表达式的介绍 Lambda表达式是Java8中包含的一项新的重要功能。它提供了一种简洁明了的方式来使用表达式表示一个方法接口。在Collection集合中非常有用。它有助于集合元素的迭代,过滤和从集合中提取数据。 Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用Lambda表达式的情况下,我们无需再次定义用于提供实现的方法。我们只编写实现代码

  • 我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)

  • 如果我更改了方法的名称,它会进行编译,但它不会重写toString,因此print方法不会打印预期的内容。 这是试图定义一个日志子系统,该子系统仅在需要时(当它真的要打印时)对lambda求值,但与非lambda参数兼容。我知道其他的方法来实现它,但我想知道为什么我不能这样做,如果有一个变通办法或我做错了什么,

  • 本文向大家介绍python lambda表达式在sort函数中的使用详解,包括了python lambda表达式在sort函数中的使用详解的使用技巧和注意事项,需要的朋友参考一下 1.lambda表达式一般用法 语法: lamda argument:expression example: 2.lambda表达式在sort函数中的使用 假如a是一个由元组构成的列表,对该列表进行排序时,我们需要用到参

  • 本文向大家介绍Java8中Lambda表达式使用和Stream API详解,包括了Java8中Lambda表达式使用和Stream API详解的使用技巧和注意事项,需要的朋友参考一下 前言 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、

  • 将异常获取为 :lambda表达式中的返回类型错误: