使用Java 8将long列表转换为可迭代的整数

时间:2018-01-04 22:30:51

标签: java java-8

如何将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.

愿任何人告诉我如何解决这个问题吗?

2 个答案:

答案 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());