根据数据使用JAVA 8(流)将列表转换为多个列表并将其存储在Map中

问题描述 投票:0回答:2

假设我有以下响应类,它收集响应和一些其他数据。

class Response{
        Boolean status;
        String message;
        Integer id;
    
        Response(Boolean s, String m, Integer id)
        {
            status=s;
            message=m;
            this.id=id;
        }
public Boolean getStatus() {
            return status;
        }
    
        public void setStatus(Boolean status) {
            this.status = status;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            id = id;
        }
    }

列出数据如下:

List<Response> response = new ArrayList<Response>();
response.add(new Response(Boolean.TRUE,"HelloTrue",1));
response.add(new Response(Boolean.FALSE,"HelloFalse",2));

我希望使用单个stream()方法根据状态类型(TRUE,FALSE)将结果作为两个不同的列表。 例如:

Map<Boolean,List<Response>> responsesResult=response.stream().....

提前致谢。

java java-8 stream java-stream
2个回答
1
投票

您可以使用Collectors.partitioningBy()

收集,这样:

Map<Boolean, List<Response>> responsesResult = response.stream()
    .collect(Collectors.partitioningBy(Response::getStatus));

0
投票

您可以使用

Collectors.partitioningBy
方法根据状态值将响应列表拆分为两个列表。此方法采用谓词作为参数,并返回带有两个键的映射:true 和 false。映射的值是满足或不满足谓词的元素列表。例如,您可以写:

MapresponseResult = response.stream() .collect(Collectors.partitioningBy(Response::getStatus));

这将创建一个包含两个条目的映射:一个条目的键为 true,值为 true 的响应列表,另一个条目的键为 false,值为 false 的响应列表。然后,您可以使用地图键访问列表:

列表 trueResponses =responseResult.get(true); 列表 falseResponses =responseResult.get(false);

我希望这可以帮助您了解如何使用

Collectors.partitioningBy
方法。 😊

© www.soinside.com 2019 - 2024. All rights reserved.