Java 8 从字符串映射到多个不同的字符串,并使用Java流添加到列表中

Java 8 从字符串映射到多个不同的字符串,并使用Java流添加到列表中,java-8,java-stream,Java 8,Java Stream,我不熟悉Java8和Streams。 我得到了一个PolicyDefinition对象,它有两个方法:getAlias和getName,这两个方法都返回一个字符串。 使用从一条语句中的PolicyDefinition集合创建的流,是否有一种优雅的方法来创建包含所有别名和策略定义名称的列表 有两种说法,这不是问题: List<String> policyNames = policyDefinitions.stream()

我不熟悉Java8和Streams。 我得到了一个PolicyDefinition对象,它有两个方法:getAlias和getName,这两个方法都返回一个字符串。 使用从一条语句中的PolicyDefinition集合创建的流,是否有一种优雅的方法来创建包含所有别名和策略定义名称的列表

有两种说法,这不是问题:

List<String> policyNames = 
              policyDefinitions.stream()
                               .map(definition -> definition.getName())
                               .collect(Collectors.toList());

List<String> policyAlias = 
              policyDefinitions.stream()
                               .map(definition -> definition.getAlias())
                               .collect(Collectors.toList());
但这可能是在一个

非常感谢您的帮助

flatMap it

然后

平面图

然后


此外,您还可以使用groupingBuy操作符创建一个以别名作为键、以名称作为值的映射,也可以使用groupingBuy操作符创建一个以别名作为键、以名称作为值的映射,我忘了提到getAlias可能返回null,您除了做什么?注意,从JDK9开始,optional只有一个流方法,JDK8的另一种选择是创建自己的方法来执行此操作,或者过滤掉空值,如List policyNames=policyDefinitions.stream.flatMapDefinition::allNames.FilterObject::nonNull.collectCollectors.toList@AominèGood point Optional.mapStream::of.orElseGetStream::empty是我的最爱。或者干脆Stream.ofgetName、getAlias.FilterObject::Nonnull我忘了提到getAlias可能会返回null,你会怎么做?注意,Optional在JDK9之前只有一个Stream方法,JDK8的另一种选择是创建自己的方法来执行此操作,或者过滤掉空值,如List policyNames=policyDefinitions.stream.flatMapDefinition::allNames.FilterObject::nonNull.collectCollectors.toList@AominèGood point Optional.mapStream::of.orElseGetStream::empty是我的最爱。或者干脆Stream.ofgetName、getAlias.FilterObject::nonNull
List<String> policyNames = policyDefinitions.stream()
    .flatMap(definition -> Stream.of(definition.getName(), definition.getAlias()))
    .collect(Collectors.toList());
public Stream<String> allNames() {
    return Stream.of(getName(), getAlias())
}
List<String> policyNames = policyDefinitions.stream()
    .flatMap(Definition::allNames)
    .collect(Collectors.toList());
public Stream<String> allNames() {
    return Stream.concat(Stream.of(getName()), Optional.ofNullable(getAlias()).stream())
}