Java Stream().map()结果为collector.toMap()值
我有Java Stream().map()结果为collector.toMap()值,java,dictionary,generics,java-8,java-stream,Java,Dictionary,Generics,Java 8,Java Stream,我有列表,对于每个元素,我想做一些逻辑,这将导致一些字符串消息。然后,我想使用createMap,其中键是InstanceWrapper:ID,值是message private String handle(InstanceWrapper instance, String status) { return "logic result..."; } private Map<String, String> handleInstances(List<InstanceWrap
列表
,对于每个元素,我想做一些逻辑,这将导致一些字符串消息
。然后,我想使用createMap
,其中键是InstanceWrapper:ID
,值是message
private String handle(InstanceWrapper instance, String status) {
return "logic result...";
}
private Map<String, String> handleInstances(List<InstanceWrapper> instances, String status) {
return instances.stream().map(instance -> handle(instance, status))
.collect(Collectors.toMap(InstanceWrapper::getID, msg -> msg));
}
您可以将每个
InstanceWrapper
映射到一个字符串,但如果您想稍后使用InstanceWrapper
提取其ID,则无法执行此操作。请尝试以下方法:
return instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, (InstanceWrapper instanceWrapper) -> this.handle(instanceWrapper, status)));
编辑:
为了美化这一点,您可以像这样模拟咖喱:
private Function<InstanceWrapper, String> handle(String status) {
return (InstanceWrapper instanceWrapper) -> "logic result...";
}
private Map<String, String> handleInstances(List<InstanceWrapper> instances, String status) {
return instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, this.handle(status)));
}
私有函数句柄(字符串状态){
返回(InstanceWrapper InstanceWrapper)->“逻辑结果…”;
}
私有映射句柄实例(列表实例、字符串状态){
返回instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID,this.handle(status)));
}
您可以将每个实例包装器
映射到一个字符串,但如果您想稍后使用实例包装器
提取其ID,则无法执行此操作。请尝试以下方法:
return instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, (InstanceWrapper instanceWrapper) -> this.handle(instanceWrapper, status)));
编辑:
为了美化这一点,您可以像这样模拟咖喱:
private Function<InstanceWrapper, String> handle(String status) {
return (InstanceWrapper instanceWrapper) -> "logic result...";
}
private Map<String, String> handleInstances(List<InstanceWrapper> instances, String status) {
return instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, this.handle(status)));
}
私有函数句柄(字符串状态){
返回(InstanceWrapper InstanceWrapper)->“逻辑结果…”;
}
私有映射句柄实例(列表实例、字符串状态){
返回instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID,this.handle(status)));
}
在收集到map之前,您无法进行映射,因为这样您将获得字符串的流
,并丢失有关InstanceWrapper
的信息Stream#toMap
接受两个lambda—一个生成键,另一个生成值。应该是这样的:
instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, instance -> handle(instance, status));
第一个lambda生成键:InstanceWrapper::getID
,第二个与之相关的值:instance->handle(instance,status)
在收集到map之前,您不能进行映射,因为这样您将获得字符串的流
,并丢失有关InstanceWrapper
的信息Stream#toMap
接受两个lambda—一个生成键,另一个生成值。应该是这样的:
instances.stream()
.collect(Collectors.toMap(InstanceWrapper::getID, instance -> handle(instance, status));
第一个lambda生成键:InstanceWrapper::getID
,第二个-关联值:instance->handle(instance,status)
是否handle(instance,status)
导致字符串消息
?是的,我在问题中包括了这个方法。是否handle(instance,status)
导致字符串消息
?是的,我在问题中包括了这个方法。