为什么会出现错误?我以为client = boto3.client('sns')
response = client.publish(
PhoneNumber='some_phone_number',
Message='some_message',
MessageAttributes = {
'AWS.SNS.SMS.SMSType': {
'DataType': 'String',
'StringValue': 'Promotional' # or 'Transactional'
}
}
)
可以返回任何值。
map
|错误:不兼容的类型:方法参考中的错误返回类型 java.lang.String无法转换为int var s = IntStream.rangeClosed(1, 5).map(String :: valueOf).collect(Collectors.toList()); |
^ ------------- ^
答案 0 :(得分:14)
使用mapToObj:
var s = IntStream.rangeClosed(1, 5).mapToObj(String::valueOf).collect(Collectors.toList());
IntStream
中的 map只能将一个int
值映射到另一个int
值。它接受IntUnaryOperator
(接受int
并返回int
)作为映射器函数,并返回IntStream
。
另一方面,mapToObj
允许您将int
值映射到任何引用类型,从而将IntStream
转换为Stream<SomeReferenceType>
。它接受IntFunction<? extends U>
(接受int
并返回引用类型)作为映射器函数,并返回Stream<U>
。
答案 1 :(得分:6)
改为使用mapToObj:
IntStream.rangeClosed(1, 5).mapToObj(String::valueOf).collect(Collectors.toList());
答案 2 :(得分:4)
尽管上述答案是正确的,并且mapToObj
是惯用的处理方法,但我认为了解问题产生的原因很重要,因此,在将来的情况下,您将知道如何通过以下方法简单地解决问题浏览文档。
当程序员不了解特定方法的工作原理时,深入研究文档是一项非常重要的技能。
因此,让我们看一下相关的流管道操作:
IntStream.rangeClosed
根据文档返回IntStream
:
从startInclusive(包含)返回顺序的有序IntStream 以1的增量步长到包容性(包括)。
根据文档,在IntStream
上调用map
预期会返回IntStream
:
返回由应用给定结果组成的流 对该流的元素起作用。
还有一点很重要,请注意map
的方法声明如下:
IntStream map(IntUnaryOperator mapper)
即它需要一个IntUnaryOperator
,它实际上表示对单个整数值操作数的操作,该操作数会生成一个整数值的结果。
但是,您要传递的函数String::valueOf
在我们处理int
时会消耗IntStream
,并返回String
,因此与{{ 1}}和这是问题的原因。
每当您想采用原始流专业化并执行某些映射功能,并因此产生IntUnaryOperator
时,Stream<R>
就是您的最佳选择。
mapToObj
声明为:
mapToObj(IntFunction<? extends U> mapper)
mapToObj
表示一个接受整数值参数并产生结果的函数,该结果的类型为IntFunction
,这意味着您将在{{1之后}}。
答案 3 :(得分:2)
或者,您可以将IntStream.boxed
用作:
IntStream
因为var s = IntStream.rangeClosed(1, 5)
.boxed()
.map(a -> Integer.toString(a))
.collect(Collectors.toList());
最初是原始整数值元素的序列。
执行此操作的另一种方式是:
a = (1,2,3)
b = a + (5,)