2014-11-21 2 views
0

removeAll을 사용하여 ArrayList에서 뺄셈 연산을 수행하려고합니다. 그러나 그 결과는 예상대로는 아닙니다. 사실 아무것도 제거하지 않습니다. 내가 볼ArrayList의 removeAll 연산 <Integer>이 예상대로 작동하지 않습니다.

Original selected : [2, 3] 
temp selected : [2, 1, 4, 5, 6] 
Add : [2, 1, 4, 5, 6] 
Delete : [2, 3] 
Add : [2, 1, 4, 5, 6] 
Delete : [2, 3] 

만 문제는 다음과 같습니다 :이 같은 tempSelectedPrivileges을 만들 때

privPickList.getTarget() returns a List<Integer> rather than ArrayList<Integer>. 

, 그것은 prefectly 잘 작동하기 때문에 :

ArrayList<Integer> tempSelectedPrivilges = new ArrayList<>(); 
tempSelectedPrivilges.add(3); 
tempSelectedPrivilges.add(5); 
tempSelectedPrivilges.add(6); 

ArrayList<Integer> tempSelectedPrivilges = new ArrayList<Integer>(privPickList.getTarget()); 
log.debug("Original selected : " + selectedPrivilges);   
log.debug("temp selected : " + tempSelectedPrivilges); 
ArrayList<Integer> addedPrivileges = new ArrayList<>(tempSelectedPrivilges); 
ArrayList<Integer> deletedPrivileges = new ArrayList<>(selectedPrivilges);   
log.debug("Add : " + addedPrivileges); 
log.debug("Delete : " + deletedPrivileges); 
addedPrivileges.removeAll(selectedPrivilges); 
deletedPrivileges.removeAll(tempSelectedPrivilges); 
log.debug("Add : " + addedPrivileges); 
log.debug("Delete : " + deletedPrivileges); 

출력은 다음과 같이이다

왜 cr 정수 목록에서 정수의 ArayList를 섭취하면 문제가 발생합니까?

그리고 때 내가 할 노력하고 있어요 :

for(Integer i : privPickList.getTarget()) { 
    tempSelectedPrivilges.add(i); 
} 

에는 컴파일 타임 오류가 없다. 그러나 런타임 오류가 라인에

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 

tempSelectedPrivilges.add(i); 
+0

클래스에서 dden equals() 메소드 ?? –

+0

'getTarget'이 List 또는 선호하는 [최소, 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 채우는 방법을 보여주십시오. – Radiodef

+0

변수는 'List'유형이어야합니다 : [Liskov 대체 원리] 참조 (http://en.wikipedia.org/wiki/Liskov_substitution_principle) – Bohemian

답변

0

public static void main(String[] args) throws Exception { 
    List<Integer> selectedPrivilges = new ArrayList<>(Arrays.asList(2, 3)); 
    List<Integer> tempSelectedPrivilges = new ArrayList<>(Arrays.asList(2, 
      1, 4, 5, 6)); 
    System.out.println("Original selected : " + selectedPrivilges); 
    System.out.println("temp selected : " + tempSelectedPrivilges); 
    List<Integer> addedPrivileges = new ArrayList<>(tempSelectedPrivilges); 
    List<Integer> deletedPrivileges = new ArrayList<>(selectedPrivilges); 
    System.out.println("Add : " + addedPrivileges); 
    System.out.println("Delete : " + deletedPrivileges); 
    addedPrivileges.removeAll(selectedPrivilges); 
    deletedPrivileges.removeAll(tempSelectedPrivilges); 
    System.out.println("Add : " + addedPrivileges); 
    System.out.println("Delete : " + deletedPrivileges); 
} 

출력은, 자바 8과 같이 (List<Integer> 사용) 나를 위해 잘 작동 (당신이 예상 한 것 같은)

Original selected : [2, 3] 
temp selected : [2, 1, 4, 5, 6] 
Add : [2, 1, 4, 5, 6] 
Delete : [2, 3] 
Add : [1, 4, 5, 6] 
Delete : [3] 
관련 문제