我正在尝试编写java 8方式:
public static void main (String[] args) throws java.lang.Exception
{
int arr [] = {3,4,5,6,7};
Arrays.asList(arr)
.stream()
.filter(i -> i % 2)
.sorted()
.map(j -> j+ 1)
.forEach(System.out::println);
}
filter
应该抛弃奇数,但我得到以下错误。
Main.java:16: error: bad operand types for binary operator '%'
.filter(i -> i % 2)
^
first type: int[]
second type: int
Main.java:18: error: bad operand types for binary operator '+'
.map(j -> j+ 1)
^
first type: int[]
second type: int
有人可以解释一下这个错误的原因吗?
答案 0 :(得分:14)
您有几个错误:
Arrays.asList()
返回一个List,其单个元素是该数组。因此,Stream
的元素是数组而不是整数。您应该将int arr [] = {3,4,5,6,7}
更改为Integer arr [] = {3,4,5,6,7}
,以获得List<Integer>
。filter
采用谓词,即返回布尔值的方法。因此,filter(i -> i % 2)
应为filter(i -> i % 2 == 0)
(如果您想保留偶数)或filter(i -> i % 2 == 1)
(如果您想保留奇数)。答案 1 :(得分:13)
您想要的代码可能如下所示:
public static void main (String[] args) throws java.lang.Exception {
int arr [] = {3,4,5,6,7};
IntStream.of(arr)
.filter(i -> i % 2 == 0)
.sorted()
.map(j -> j+ 1)
.forEach(System.out::println);
}
IntStream
提供了一系列原始的int-valued元素,这似乎是你需要的。这可能比装箱值更有效。filter
需要int predicate。它应该返回true
或false
,如上面的示例代码所示。您的lambda不是谓词,因为它返回一个整数。答案 2 :(得分:3)
问题是Arrays.asList(arr)
返回List
数组。这就是你得到错误的原因。 Main.java:16: error: bad operand types for binary operator '%'