如何将long列表转换为整数列表。我写道:
longList.stream().map(Long::valueOf).collect(Collectors.toList())
//longList is a list of long.
我有一个错误:
Incompatible types. Required iterable<integer> but collect was inferred to R.
愿任何人告诉我如何解决这个问题吗?
答案 0 :(得分:11)
您需要Long::intValue
而不是Long::valueOf
,因为此函数返回的Long
类型不是int
。
Iterable<Integer> result = longList.stream()
.map(Long::intValue)
.collect(Collectors.toList());
或者如果您希望接收器类型为List<Integer>
:
List<Integer> result = longList.stream()
.map(Long::intValue)
.collect(Collectors.toList());
答案 1 :(得分:2)
如果您不关心上溢或下溢,可以使用Long::intValue
但是如果您想要抛出异常(如果发生这种情况),您可以
Iterable<Integer> result =
longList.stream()
.map(Math::toIntExact) // throws ArithmeticException on under/overflow
.collect(Collectors.toList());
如果您希望“饱和”您可以做的值
Iterable<Integer> result =
longList.stream()
.map(i -> (int) Math.min(Integer.MAX_VALUE,
Math.max(Integer.MIN_VALUE, i)))
.collect(Collectors.toList());