从流中获取字符串列表

poy*_*ger 2 java java-8 java-stream

我有一个包含字符串和字符串列表的流,我想把所有值作为字符串列表.无论如何用一些流操作来做到这一点?

Stream stream = Stream.of("v1", Arrays.asList("v2, v3"));
Run Code Online (Sandbox Code Playgroud)

khe*_*ood 6

通常你不会在列表中混淆这些不同的类型,但你可以从中得到你想要的结果; 每个单个字符串可以转换为一个字符串的流,每个字符串列表可以转换为多个字符串的流; 然后flatMap将所有流变平为一个单独的字符串流.

List<String> strings = l.stream()
        .flatMap(o -> {
                if (o instanceof List) {
                    return ((List<String>) o).stream();
                }
                return Stream.of((String) o);
            })
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

你会得到一个unchecked cast警告,但这就是你在一个容器中混合不同类型的结果.

  • @poyger避免`instanceof`的方法是不在一个容器中混合不同类型的对象.只要他们混淆了,你就需要像`instanceof`这样的东西来分开它们. (2认同)