Java 8流 - 如何通过结果操纵组中的值?

Bic*_*ick 6 java java-8 java-stream

我有一个包含两个String字段的对象列表

Name1, Active
Name2, InActive
Name3, InActive
Name4, Active
Run Code Online (Sandbox Code Playgroud)

我想要一个

Map<Boolean, List<String>>
Run Code Online (Sandbox Code Playgroud)

其中Active = true且InActive = false.

我试过了

active = dualFields.stream().collect(
       Collectors.groupingBy( 
           x -> StringUtils.equals(x.getPropertyValue(), "Active")));
Run Code Online (Sandbox Code Playgroud)

但我收到了

Map<Boolean, List<DualField>>
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 7

首先,您可以使用partitioningBy,这是一个特殊情况groupingBy(您将其Predicate分为两组).您可以将对象映射到所需的字符串mapping.

我假设你想要List<String>包含第二个属性的值(即不getPropertyValue()包含"Active"或"InActive"):

Map<Boolean,List<String>> map =
    dualFields.stream()
              .collect(Collectors.partitioningBy(x -> StringUtils.equals(x.getPropertyValue(), "Active"),
                                                 Collectors.mapping(DualField::getSecondPropertyValue,
                                                                    Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)