Jor*_*rdi 14 java java-8 java-stream
我遇到了一个问题:
我创建了这个我需要映射到的流Map<String, Object>:
private Map<String, Object> collectArguments(JoinPoint point) {
CodeSignature signature = (CodeSignature) point.getSignature();
String[] argNames = signature.getParameterNames();
Object[] args = point.getArgs();
return IntStream.range(0, args.length)
.collect(Collectors.toMap(param -> argNames[param], param -> args[param]));
}
Run Code Online (Sandbox Code Playgroud)
我收到以下消息,我不太清楚:
[Java] Type mismatch: cannot convert from Collector<Object,capture#3-of ?,Map<Object,Object>> to Supplier<R>
Run Code Online (Sandbox Code Playgroud)
Era*_*ran 17
IntStream没有collect接受a 的方法Collector.它只有一个collect具有此签名的3参数方法:
<R> R collect(Supplier<R> supplier,
ObjIntConsumer<R> accumulator,
BiConsumer<R, R> combiner)
Run Code Online (Sandbox Code Playgroud)
也许你应该使用Stream<Integer>:
return IntStream.range(0, args.length)
.boxed()
.collect(Collectors.toMap(param -> argNames[param],
param -> args[param]));
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望使用collect方法IntStream,它将如下所示:
return IntStream.range(0, args.length)
.collect(HashMap::new,
(m,i)->m.put(argNames[i],args[i]),
(m1,m2)->m1.putAll (m2));
Run Code Online (Sandbox Code Playgroud)
要么
return IntStream.range(0, args.length)
.collect(HashMap::new,
(m,i)->m.put(argNames[i],args[i]),
Map::putAll);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |