流接口中的映射函数定义如下:
<R> Stream<R> map(Function<? super T,? extends R> mapper)
函数参数列表与函数接口自己的规范一致
Interface Function<T,R>
方法是
R apply(T t)
这意味着它需要一个T,但返回一个R。但我正在运行这个代码
import java.util.stream.*;
import java.util.function.*;
public class T3 {
public static void main(String...args){
mapTest();
}
static void mapTest(){
Stream<String> s = Stream.of("monkey", "gorilla", "bonobo");
s.map(String::length).forEach(System.out::print); // 676
}
}
奇怪的是,为什么它能工作,但论点类型似乎不匹配?没有简单的方法来解释它,但我的理解是,一个函数应该接受类型T的输入并返回类型R。当它在流中使用时,它接受类型String的输入并返回类型int(即String.length())。但是小溪。map被键入以返回与流相同的类型(即R,在本例中,字符串ie不是int):
为了理解它,让我们看看lengh函数。
因此,要使这个函数工作,它需要一个字符串类型的对象,并且不需要调用任何参数。它将返回一个整型的int原语。
那么,如果我们能把它转换成一个函数呢?我们需要一个参数o字符串作为一个对象和一个整数的返回,所以下一个代码将起作用:
map函数用于以相同的顺序对列表中的元素进行某种计算,并返回结果。您可以在这里找到更多信息。
所以现在很明显,前提是:
<R> Stream<R> map(Function<? super T,? extends R> mapper)
将与以下人员合作:
Stream<String> s = Stream.of("monkey", "gorilla", "bonobo");
s.map(String::length).forEach(System.out::print); // 676
如果要重新创建函数,应执行以下操作:
Function<String, Integer> z = (s) -> s.length();
“i”和“z”都会做同样的事情,这就是你的代码工作的原因。
您在Stream上调用的map
-方法使用类型为函数的
mapper
新流的元素类型
您的
映射器
获取一个字符串
,并返回其字符串。长度()
。字符串的返回类型。length()
是一个int
。这是结果流的元素类型。所以你的映射器是被输入的
Function<? super String, ? extends Integer>
由于
int
自动装箱到整数
。
我正在结合Lombok和构建器模式使用MapSTRt。我有一个问题,即MapSTRt正在对生成的映射器函数中的所有参数进行显式空检查,并在所有参数为空的情况下提前退出,例如: 我想实现MapStruct不实现完整的空检查。即使所有参数都为null,它也应该设置整个生成器,并在生成器进行null检查(如果有)时调用build。
问题内容: 我想了解为什么下面的代码片段无法编译。将函数接受为可能具有任何返回类型的函数参数的Go方法是什么? 播放:https://play.golang.org/p/CqbuEZGy12 我的解决方案基于Volker的答案: 播放:https://play.golang.org/p/waOGBZZwN7 问题答案: 你绊倒了围棋新人一个非常普遍的误解:空接口并 不能 意味着“任何类型”。确实不
我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))
我对使用mybatis作为ORM工具相当满意。但是我不能理解MyBatis中参数映射是如何工作的。 假设我定义了一个mybatis映射器接口,该接口有一个获取用户详细信息的方法。 我定义了我的类,其中包含select。
陈述 我想去 但是显然没有使用...因为它不是切肉刀,我想了解更多关于函数及其传递参数的方式。 所以我尝试附加一个使用map函数列表的所有元素。但在此之前,是一个方法,而不是一个方法。 最后一个映射函数返回TypeError: 我想知道是否可以将参数传递给使用的方法。感谢
如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcpy(char *dest, const char *src); 其中src参数是传入参数,dest参数是传出参数。有些函数的指针参数同时担当了这两种角色,如select函数。其函数原型为: int