这是我的代码。我想使用流和lambda将其更改为Java 8样式。你能帮帮我吗?
Annotation[][] annotations = joinPoint.getTarget().getClass()
.getMethod(methodName, signature.getParameterTypes()).getParameterAnnotations();
for (int i = 0; i < parametersCount; i++) {
for (int j = 0; j < annotations[i].length; j++) {
Annotation annnotation = annotations[i][j];
if (annnotation.annotationType().isAssignableFrom(Hidden.class)) {
args.set(i, "***************");
}
}
}
答案 0 :(得分:0)
我不知道您希望实现什么,但将代码转换为Stream
API的方式如下:
IntStream.range(0, parametersCount).forEach(
i -> Arrays.stream(annotations[i])
.filter(a -> a.annotationType().isAssignableFrom(Hidden.class))
.forEach(annotation -> args.set(i, "***********"))
);
答案 1 :(得分:0)
您可以采用以下方式撰写:
// create stream of indices
IntStream.range(0, parametersCount)
// filter it leaving only those which have at least one Hidden annotation
.filter(i -> Stream.of(annotations[i])
.anyMatch(a -> a.annotationType().isAssignableFrom(Hidden.class)))
// reset the corresponding args
.forEach(i -> args.set(i, "***********"));
请注意,由于以下原因,此问题不太适合Stream API:
您正在修改现有数据结构。当您对不可变数据结构进行操作(生成新内容而不是改变现有内容)时,Stream API是最有用的。
你有&#34; parallel&#34;结构:args
的第一个元素对应annotations
的第一个元素,第二个元素也是如此,依此类推。这通常不是很好的代码设计,并且标准的Stream API不是为了支持它而定制的。