카테고리 보관물: Java

Java

새 목록을 만들지 않고 세트를 목록으로 변환 { Set<String> set =

나는 변환이 코드를 사용하고 SetA를 List:

Map<String, List<String>> mainMap = new HashMap<>();

for (int i=0; i < something.size(); i++) {
  Set<String> set = getSet(...); //returns different result each time
  List<String> listOfNames = new ArrayList<>(set);
  mainMap.put(differentKeyName, listOfNames);
}

루프의 각 반복에서 새 목록을 작성하지 않으려 고합니다. 가능합니까?



답변

List.addAll () 메소드를 사용할 수 있습니다 . Collection을 인수로 받아들이고 세트는 Collection입니다.

List<String> mainList = new ArrayList<String>();
mainList.addAll(set);

편집 : 질문의 편집에 응답합니다.

그것은 당신이 갖고 싶어 것을 쉽게 알 수있다 MapListK 다른 값을 가질하기 위해, 값으로들, 당신은 K 다른 목록을 작성해야합니다.

따라서 :이 목록을 전혀 작성하지 않으려면 목록을 작성해야합니다.

가능한 해결책은 :

당신을 선언 MapA와 Map<String,Set>Map<String,Collection>대신에, 그리고 당신의 세트를 삽입합니다.


답변

생성자를 사용하여 변환하십시오.

List<?> list = new ArrayList<?>(set);


답변

또한 Guava Collect 라이브러리에서 다음을 사용할 수 있습니다 newArrayList(Collection).

Lists.newArrayList([your_set])

이것은 객체 를 선언 (또는 인스턴스화) 할 필요가 없다는 점을 제외하고 는 amit 의 이전 답변과 매우 유사 list합니다.


답변

Java 8에서는 다음과 같은 하나의 라이너를 사용할 수 있습니다.

List<String> list = set.stream().collect(Collectors.toList());

다음은 하나의 작은 예입니다.

public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("A");
        set.add("B");
        set.add("C");
        List<String> list = set.stream().collect(Collectors.toList());
}


답변

가장 간단한 해결책

내 세트를 List로 변환하고 반환하는 매우 빠른 방법을 원했기 때문에 한 줄로

 return new ArrayList<Long>(mySetVariable);


답변

이 한 줄 변경을 사용할 수 있습니다. Arrays.asList(set.toArray(new Object[set.size()]))

Map<String, List> mainMap = new HashMap<String, List>();

for(int i=0; i<something.size(); i++){
  Set set = getSet(...);
  mainMap.put(differentKeyName, Arrays.asList(set.toArray(new Object[set.size()])));
}  


답변

나는 할것이다 :

Map<String, Collection> mainMap = new HashMap<String, Collection>();

for(int i=0; i<something.size(); i++){
  Set set = getSet(...); //return different result each time
  mainMap.put(differentKeyName,set);
}