1
使用java8将对象某个字段值与“_”连接起来。代码中的最后一行显示“stream has already been operated upon 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(""));
并没有这样的例外。
您正在尝试重用'exclusions'流为fields'的'每一个元素。流不能被重用。把你的排除项放入一个'Set'并用'f - >过滤! exclusionsSet.contains(f.getName())' – Misha
@Misha为什么'排除'流被重用?我认为它在第一个过滤器中使用过一次。 – Tiina
@Misha @Eugene OK。我明白。在另一个用法中,我有'过滤(f - >!Arrays.stream(排除).anyMatch(e - > e.equals(f.getName())))',因此相同的数组变成每个项目的流因此没关系。 – Tiina