1
이것은 성능 또는 모범 사례에 관한 더 많은 질문입니다. 사용자 지정 데이터 구조의 항목을 보유하는 List가 있습니다. 이 같이 보인다 : 내 목록에서 항목을 삭제하고 내가 이렇게 다른 목록에 추가 할 그래서두 개의 스트림을 열지 않고 스트림 내에서 데이터를 조작하십시오.
public class Entry {
private int id;
private String title;
private String description;
....
}
:
나는 스트림들이 새로운 생성 데이터를 조작하지 않습니다 알고Entry id = entries.stream().filter(e -> Integer.toString(e.getId()).equals(args[1]))
.map(e -> e).findAny().get();
entries.stream().filter(e -> Integer.toString(e.getId()).equals(args[1]))
.forEach(entry -> {
doneEntries.add(new Entry(entry.getTitle(),
entry.getDescription(),
"done",
entry.getTags(),
doneId));
doneId+=1;
});
entries.remove(id);
데이터 그래서 나는 두 번째 스트림에서 항목을 삭제할 수 없습니다. ConcurrentModificationException이 발생합니다. 제 생각에는 제 결과는 단지 해결 방법 일 뿐이며 성과가 좋지 않습니다.
이 코드 섹션을 향상시키는 방법?
entries = entries.stream().filter(e -> {
boolean result = true;
if (!Integer.toString(e.getId()).equals(args[1])) {
doneEntries.add(new Entry(e.getTitle(), e.getDescription(), "done", e.getTags(), doneEntries.size() + 1));
result = false;
}
return result;
}).collect(Collectors.toList());
스트림입니다 항상 최선의 선택을 : – Kayaman
[David] (http://stackoverflow.com/users/4796021/david-pérez-cabrera)의 답이 좋았습니다. 그러나지도가 가장 좋은 선택입니다. @ 카야 만에게 감사합니다. – chrootzius