나는이 작업을 수행하는 방법을 확실하지 오전 작업을 수행, 나는 i 번째 항목을 제거하고 그 위에 몇 가지 코드를 수행의 ConcurrentLinkedQueue
(그것 모두)를 반복하고 싶습니다.자바 스트림은 제거하고 ConcurrentLinkedQueue를
public static class Input {
public static final ConcurrentLinkedQueue<TreeNode> treeNodes = new ConcurrentLinkedQueue<>();
}
public static class Current {
public static final ConcurrentHashMap<Integer, TreeNode> treeNodes = new ConcurrentHashMap<>();
}
TreeNode
이 간단한 클래스
TreeNode treeNode = Input.treeNodes.poll();
while (treeNode != null) {
treeNode.init(gl3);
Current.treeNodes.put(treeNode.getId(), treeNode);
treeNode = Input.treeNodes.poll();
}
입니다 이것은 내가 사용 스트림 할 노력하고 있어요 방법은 다음과 같습니다 :
Input.treeNodes.stream()
.forEach(treeNode -> {
Input.treeNodes.remove(treeNode);
treeNode.init(gl3);
Current.treeNodes.put(treeNode.getId(), treeNode);
});
을
이
내가 할하는 데 사용 된 것입니다 안에있는 항목을 제거해야 할 때 오류가 발생할 수 있습니다.forEach
동작.
그래서 제 질문은 :
이 안전한 및/또는 그것을 할 수있는 더 나은 방법이있다? 스트림을 처리하는 동안 당신이 얻을 수 있기 때문에
당신이 가정 한 것처럼
HashMap (코드에서 뭔가를 이름 짓기 위해 기존 JDK 클래스를 재사용하는 것은 좋은 생각처럼 보이지 않습니다.), Input, TreeNode 등은 무엇입니까? [mcve]를 제작할 수 있습니까? – assylias
물론, 나는 나의 질문을 편집했다. 어떤 이름을 언급하고 있습니까? – elect
JDK에는 HashMap이 있고 자신 만의 클래스 인 HashMap 역시 너무 혼란 스럽다. – assylias