Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Stream().map()结果为collector.toMap()值_Java_Dictionary_Generics_Java 8_Java Stream - Fatal编程技术网

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

我有
列表
,对于每个元素,我想做一些逻辑,这将导致一些
字符串消息
。然后,我想使用create
Map
,其中键是
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)
导致
字符串消息
?是的,我在问题中包括了这个方法。