我试图编写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);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个错误的原因吗?
Era*_*ran 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)(如果你想保持奇数).Lac*_*lev 14
您想要的代码可能如下所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
IntStream提供了一系列原始的int-valued元素,这似乎是你需要的.这可能比装箱值更有效.filter这种情况下需要一个INT谓语.它应该返回true或false如上面的示例代码中那样.您的lambda不是谓词,因为它返回一个整数.| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |