Java/배열

[Java]배열에서 특정 값 제거하는 방법

DevStory 2022. 8. 22.

배열에서 특정 값 제거하는 방법

Java는 배열에서 특정 값을 제거하는 메서드를 제공하지 않습니다.

 

외부 라이브러리 Apache Commons를 사용하면 배열의 요소를 제거할 수 있지만, 이번 포스팅은 외부 라이브러리를 사용하지 않고 배열에 특정 값이 존재하는 경우 배열의 값을 제거하는 몇 가지 방법을 소개합니다.


방법 1. Stream API

Java의 버전이 1.8 이상인 경우 Stream API를 사용할 수 있습니다.

 

[제거 방법]

순서 1. Arrays 클래스에서 stream() 메서드를 호출하고 배열을 전달하여 스트림으로 변환합니다.

순서 2. 변환된 스트림에서 filter() 메서드를 호출하고 필터링 조건을 전달합니다.

순서 3. 필터링된 결과를 toArray() 메서드를 호출하여 배열로 변환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "AA"를 제거합니다.

public static void main(String args[]) {
  String[] strArray = { "AA", "AB", "AA", "ABC", "ABCD" };

  System.out.println("\"AA\" 제거 전: " + Arrays.toString(strArray));

  strArray = Arrays.stream(strArray)
                   .filter(item -> !item.equals("AA"))
                   .toArray(String[]::new);

  System.out.println("\"AA\" 제거 후: " + Arrays.toString(strArray));
}

[실행 결과]

"AA" 제거 전: [AA, AB, AA, ABC, ABCD]
"AA" 제거 후: [AB, ABC, ABCD]

방법 2. List로 변환 후 제거

배열을 List로 변환 후 List의 remove() 메서드를 사용하여 특정 값을 제거할 수 있습니다.

 

[제거 방법]

순서 1. 배열을 List로 변환합니다.

순서 2. List의 remove() 메서드를 사용하여 특정 값을 제거합니다.

순서 3. 특정 값이 제거된 List를 다시 배열로 변환합니다.

 

다음 예제는 String 타입의 배열에서 문자열 "AA"를 제거합니다.

public static void main(String args[]) {
  String[] strArray = { "AA", "AB", "AA", "ABC", "ABCD" };

  System.out.println("\"AA\" 제거 전: " + Arrays.toString(strArray));

  List<String> strList = new ArrayList<>(Arrays.asList(strArray));
  strList.remove("AA");
  strArray = strList.toArray(new String[0]);

  System.out.println("\"AA\" 제거 후: " + Arrays.toString(strArray));
}

[실행 결과]

"AA" 제거 전: [AA, AB, AA, ABC, ABCD]
"AA" 제거 후: [AB, AA, ABC, ABCD]

이 방법은 한 가지 문제점이 존재하는데, List에 동일한 값이 존재하는 경우 해당 값이 모두 제거되지 않고 처음 위치(0번째 인덱스)와 가까운 값이 제거됩니다.

 

모든 값을 제거하고 싶다면, remove() 메서드가 아닌 removeAll() 메서드를 호출하고 특정 값을 ArrayList로 변환하여 매개변수로 전달합니다.

public static void main(String args[]) {
  String[] strArray = { "AA", "AB", "AA", "ABC", "ABCD" };

  System.out.println("\"AA\" 제거 전: " + Arrays.toString(strArray));

  List<String> strList = new ArrayList<>(Arrays.asList(strArray));
  strList.removeAll(Arrays.asList("AA"));
  strArray = strList.toArray(new String[0]);

  System.out.println("\"AA\" 제거 후: " + Arrays.toString(strArray));
}

[실행 결과]

"AA" 제거 전: [AA, AB, AA, ABC, ABCD]
"AA" 제거 후: [AB, ABC, ABCD]
반응형

댓글