끝까지한다
251
2020-10-23 11:24:35
4
917

List<Map<String,Object>> 의 중복 Map 제거 방법


[

    {key1 : "a", key2 : "b", key3 : "c" }

    {key1 : "a", key2 : "b", key3 : "c" }

    {key1 : "a", key2 : "b", key3 : "c" }

    {key1 : "a", key2 : "b", key3 : "d" }

    {key1 : "a", key2 : "b", key3 : "d" }

    {key1 : "a", key2 : "b", key3 : "e" }

    {key1 : "a", key2 : "b", key3 : "e" }

]

Map을 List에 담은 형식의 데이터가 있습니다.

여기서 아래와 같이 데이터를 key3의 중복데이터를 제거한

데이터로 만드려고 한다면 2중 for문을 사용해야하는걸까요?

어떤 방식으로 접근해야할지 알려주시면 감사하겠습니다.

[

    {key1 : "a", key2 : "b", key3 : "c" }

    {key1 : "a", key2 : "b", key3 : "d" }

    {key1 : "a", key2 : "b", key3 : "e" }

]

0
  • 답변 4

  • 퀘이사123
    552
    2020-10-23 11:48:05 작성 2020-10-23 11:49:44 수정됨

    제가 생각나는건..


    List<String> as = new ArrayList<String>(); //중복키구분용 리스트

    List<Map<String,Object>> asd = new ArrayList<Map<String,Object>>(); // 원본값들어있는리스트

    List<Map<String,Object>> asd2 = new ArrayList<Map<String,Object>>(); // 중복제거된값이들어갈리스트

    for(Map<String,Object> m : asd) {

    String a = (String)m.get("key3");

    if(!as.contains(a)) {

    as.add(a);

    asd2.add(m);

    }

    }

    일단 원본값들어있는고 for문돌리면서 중복의 기준이 되는 값(스트링생각하고)을 뽑습니다.

    그리고 그 값이 중복키구분용 리스트에 있는지 확인하고

    없으면 중복키구분용리스트에 키값을 추가하고 

    중복제거된값이들어갈리스트에 맵을 추가하면됩니다.

    그러면 asd2에는 중복값없는 애들만 들어가게됩니다.

  • Dev.kerberos
    703
    2020-10-23 12:08:11

    Map말고 Set란것도있긴한데..


  • ukyo
    53
    2020-10-23 13:27:17

    윗분만씀처럼 Set을 이용하면 됩니다.

    Set생성할때 list를 넘겨주면되고 

    Set<Map<String, String>> set = new HashSet<Map<String, String>>(list);

    그걸 다시 리스트로 변환할때는 아래와 같이 하면 됩니다.

    List<Map<String, String>> list2 = new ArrayList<Map<String, String>>(set );

  • 끝까지한다
    251
    2020-10-23 18:42:16

    퀘이사123 님 정말  감사합니다 알려주신 방법으로 응용해서 해결할 수 있었습니다.


    Dev.kerberos 님, ukyo  님 답변 감사합니다. 해당 방법으로도 테스트 해볼 예정입니다. 


    알려주신 방법대로 저 스스로 정리하고 학습하겠습니다. 다음에는 저도 이렇게 도움을 줄 수 있는 사람이됐으면 좋겠네요 정말 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.