为什么Java Stream.map以Function mapper作为输入,而不是Function

12 浏览
0 Comments

为什么Java Stream.map以Function mapper作为输入,而不是Function

为什么map将其输入作为类型为Function,而不是

例如,当我执行以下操作时:

List list = new ArrayList<>();
list.stream().map(xyz -> {}); // 这里xyz对于此实例始终是Integer类型。
                              // 那为什么它将输入作为"? super Integer"?

这是因为不限制方法引用吗?这是唯一的使用情况吗?

0
0 Comments

Java Stream的map方法接受一个Function mapper作为输入,而不是Function。这种设计是为了允许更广泛的类型操作。

如果我们有一个泛型函数:

Function func = String::valueOf;

那么我们可以这样使用:

List list = List.of(1, 2);
Stream stream = list.stream().map(func);

或者这样使用:

List list = List.of(1L, 2L);
Stream stream = list.stream().map(func);

这是因为Stream.map(...)方法的参数是Function mapper,其中T和R分别是输入和输出的类型。这意味着如果T是Long类型,那么将允许函数接受Long类型的元素,以下赋值也将变为有效:

Function mapper = func;

如果使用Function,上述示例代码将无法编译通过。

Java Stream的map方法接受Function mapper作为输入,允许更广泛的类型操作。这种设计使得代码更加灵活和可复用。

0