当前位置: 首页 > 知识库问答 >
问题:

String stream Joining:stream已被操作或关闭

武元白
2023-03-14

使用java8将对象的某个字段值与“_”连接起来。代码中的最后一行抛出一个“stream has eave been operated on or closed”。

Stream<Field> fields = ...
Stream<String> exclusions = ...
Stream<String> stringStream = fields.filter(f -> exclusions.anyMatch(e -> e.equals(f.getName())))
        .map(f -> {
            f.setAccessible(true);
            Object value = null;
            try {
                value = f.get(obj);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return value;
        })
        .filter(v -> v != null)
        .map(Object::toString);
String suffix = stringStream.collect(Collectors.joining("_"));
List<Foo> list = new ArrayList<>();
list.stream().filter(item -> item != null).map(item -> {
    String value = null;
    return value;
}).filter(item -> item != null).map(item -> {
    String value = null;
    return value;
}).collect(Collectors.joining(""));

共有1个答案

邹华池
2023-03-14

第一个筛选器调用了多少次?不止一次,对吧?在第一次调用filter时使用的排除是通过anymatch使用的;因此,第二次尝试使用它时,会得到异常。

解决这个问题的方法是对每一个过滤操作进行流式处理:

filter(f -> sourceOfExclusions.stream().anyMatch...
 类似资料: