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

时间:2017-10-02 10:00:22

标签: java java-8 java-stream

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

Name1, Active
Name2, InActive
Name3, InActive
Name4, Active

我想要一个

Map<Boolean, List<String>>

其中Active = true且InActive = false。

我试过

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

但我收到了

Map<Boolean, List<DualField>>

2 个答案:

答案 0 :(得分:7)

首先,您可以使用groupingBy,这是Predicate的特例(您将mapping分组为两组)。您可以使用List<String>将对象映射到所需的字符串。

我假设您希望getPropertyValue()包含第二个属性的值(即不是Map<Boolean,List<String>> map = dualFields.stream() .collect(Collectors.partitioningBy(x -> StringUtils.equals(x.getPropertyValue(), "Active"), Collectors.mapping(DualField::getSecondPropertyValue, Collectors.toList())); ,其中包含“Active”或“InActive”):

assert(x>10);

答案 1 :(得分:2)

如果您希望List<String>propertyValue组成,而不是:

active = dualFields.stream().collect(
        Collectors.groupingBy( 
            x -> StringUtils.equals(x.getPropertyValue(), "Active"),
            Collectors.mapping(DualField::getPropertyValue, Collectors.toList());
            ));