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