Java/Java 기타

자바에 리스트 내부 중복된 원소 지우는 두가지 방법

kimc 2022. 2. 24. 22:40

```

자바에서 리스트 내부에 중복된 값 지우는 방법

```

이번 글을 통해 배워갈 내용

1. 명령형 방법 (Imperative method)

2. 선언형 방법 (declarative method)


 

명령형은 한 단어로 정의하면 HOW입니다.

아래와 같이 리스트를 받아서 무엇을 어떻게 해야 되는지 하나하나 알려줍니다.

 

아래 코드를 보고 명령을 알 수 있습니다.

(리스트 내부를 하나씩 돌면서 반환할 리스트가 가지고 있지 않으면 추가한다.)

(for each element in list if returnList does not contains the element, add element then return element. )

public <T> List<T> imperativeStyleDistinct(List<T> inputList) {
    List<T> retList = new ArrayList<>();
    for (T val : inputList)
        if (!retList.contains(val)) {
            retList.add(val);
        }
    return retList;
}

 

반면 선언형은 What입니다.

구체적으로 어떻게 할지는 안 알려 주지만

stream으로 흐르듯 데이터를 봐서 중복되지 않는 녀석들만 골라서 리스트로 바꿔서 반환해라입니다.

(stream inputlist and collect distinct data as list)

public <T> List<T> declarativeStyleDistinct(List<T> inputList) {
    return inputList.stream().distinct().collect(Collectors.toList());
}

 

선언형은 한마디로 꿀입니다.

가독성이 높고

재사용성이 좋으며

유지보수하기도 편합니다.

 

 

 

전체 코드는 아래와 같습니다.

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Distinct01 {
    public <T> List<T> imperativeStyleDistinct(List<T> inputList) {
        List<T> retList = new ArrayList<>();
        for (T val : inputList)
            if (!retList.contains(val)) {
                retList.add(val);
            }
        return retList;
    }

    public <T> List<T> declarativeStyleDistinct(List<T> inputList) {
        return inputList.stream().distinct().collect(Collectors.toList());
    }
}
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {

        Distinct01 distinct01 = new Distinct01();

        List<Integer> integers = Arrays.asList(1,2,3,4,5,1,2,3,4,5,6,7);
        System.out.println(distinct01.imperativeStyleDistinct(integers));
        System.out.println(distinct01.declarativeStyleDistinct(integers));

        List<Double> doubles = Arrays.asList(1.0,2.0,3.0,4.0,5.0,6.0,7.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0);
        System.out.println(distinct01.imperativeStyleDistinct(doubles));
        System.out.println(distinct01.declarativeStyleDistinct(doubles));

        List<String> strings = Arrays.asList("K1","K1","K2","K2","K2","K3","K3","K4","K4","K4");
        System.out.println(distinct01.imperativeStyleDistinct(strings));
        System.out.println(distinct01.declarativeStyleDistinct(strings));


    }
}

 

결괏값

[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
[K1, K2, K3, K4]
[K1, K2, K3, K4]

 

참조

https://stackoverflow.com/questions/1019854/java-distinct-list-of-objects

 

Java - Distinct List of Objects

I have a list/collection of objects that may or may not have the same property values. What's the easiest way to get a distinct list of the objects with equal properties? Is one collection type best

stackoverflow.com

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90