ParameterizedType parameterized =
(ParameterizedType) List.class.getMethod("iterator").getGenericReturnType();
Type raw = parameterized.getRawType();
Run Code Online (Sandbox Code Playgroud)
ParameterizedType#getRawType()
返回a Type
,而不是a Class<?>
(虽然我java.lang.Class
现在已经实现Type
).有没有一个很好的理由为什么getRawType()
不声明它的返回类型Class<?>
?是否存在getRawType()
可能不是结果的极端情况Class<?>
?
这已经足够让人感到挣扎j.l.r.Type
; 这似乎是一个他们本可以为我们拯救一个沮丧的实例.
如何使用Java 8实现一个函数来获取一些流,并生成一个流,其中每个元素都是一个由流的笛卡尔积的一个成员组成的列表?
我已经看过这个问题 - 这个问题使用了一个聚合器BinaryOperator
(采用类似类型的两个项目并生成相同类型的项目).我希望最终结果中的项目是List
s而不是输入流中的元素类型.
具体地说,假设我调用product
了我想要的函数,如下:
Stream<List<String>> result =
product(
Stream.of("A", "B", "C", "D"),
Stream.of("I", "J", "K),
Stream.of("Y", "Z")
);
result.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
应该打印:
[A, I, Y]
[A, I, Z]
[A, J, Y]
[A, J, Z]
[A, K, Y]
[A, K, Z]
[B, I, Y]
...
[D, K, Y]
[D, K, Z]
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望这个操作尽可能地懒惰.例如,如果输入流是由生成的Stream.generate()
,那么如果这些流的供应商在绝对需要之前没有被执行,那就太好了.