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(""));
그리고 그러한 예외가 없다.
. 스트림을 다시 사용할 수 없습니다. 당신의 예외를'Set'에 넣고'f ->! exclusionsSet.contains (f.getName())' – Misha
@Misha'제외 '스트림이 재사용되는 이유는 무엇입니까? 나는 이것이 첫 번째 필터에 사용 된 것으로 생각합니다. – Tiina
@Misha @Eugene 확인. 이해 했어. 다른 사용법에서는'filter (f ->! Arrays.stream (excluions) .anyMatch (e -> e.equals (f.getName())))')를 사용하여 동일한 배열을 모든 항목에 대한 스트림으로 변환하고 그러므로 괜찮습니다. – Tiina