Java流题,mapToInt和average方法
Java stream question, mapToInt and average method
为什么我可以在其中一个上调用 average()
方法,而在另一个上却不能?他们不应该是等价的吗?
示例 1 - 有效
List<String> stringList = new ArrayList<>();
stringList.add("2");
stringList.add("4");
stringList.add("6");
// String array ("2","4", "6"
averageValue = stringList.stream()
.mapToInt(s -> Integer.valueOf(s))
.average()
.getAsDouble();
示例 2 - 未编译(删除了 mapToInt 调用,因为已经传递了整数流)
List<Integer> IntegerList = new ArrayList<>();
IntegerList.add(2);
IntegerList.add(4);
IntegerList.add(6);
averageValue = IntegerList.stream()
.average()
.getAsDouble();
问题是,当我已经向它传递了一个整数流时,为什么我还需要调用 mapToInt 方法?
有两种不同的类型:Stream<Integer>
和IntStream
。
Java 的泛型不能有只适用于一些 泛型的方法。例如,它不能有 Stream<Integer>.average()
而不是 也 有 Stream<PersonName>.average()
,即使普通人的名字没有意义。
因此,Stream
有一个mapToInt
方法将其转换为IntStream
,然后提供average()
方法。
IntStream
提供了average()
方法,所以要使用它需要使用mapToInt
方法将Stream<Integer>
转换为IntStream
。
为什么我可以在其中一个上调用 average()
方法,而在另一个上却不能?他们不应该是等价的吗?
示例 1 - 有效
List<String> stringList = new ArrayList<>();
stringList.add("2");
stringList.add("4");
stringList.add("6");
// String array ("2","4", "6"
averageValue = stringList.stream()
.mapToInt(s -> Integer.valueOf(s))
.average()
.getAsDouble();
示例 2 - 未编译(删除了 mapToInt 调用,因为已经传递了整数流)
List<Integer> IntegerList = new ArrayList<>();
IntegerList.add(2);
IntegerList.add(4);
IntegerList.add(6);
averageValue = IntegerList.stream()
.average()
.getAsDouble();
问题是,当我已经向它传递了一个整数流时,为什么我还需要调用 mapToInt 方法?
有两种不同的类型:Stream<Integer>
和IntStream
。
Java 的泛型不能有只适用于一些 泛型的方法。例如,它不能有 Stream<Integer>.average()
而不是 也 有 Stream<PersonName>.average()
,即使普通人的名字没有意义。
因此,Stream
有一个mapToInt
方法将其转换为IntStream
,然后提供average()
方法。
IntStream
提供了average()
方法,所以要使用它需要使用mapToInt
方法将Stream<Integer>
转换为IntStream
。