java - एक सेट<स्ट्रिंग> एक सूची<स्ट्रिंग> में कनवर्ट करने का सबसे संक्षिप्त तरीका




list collections (4)

जावा 8 का उपयोग (संशोधित सूचियां)

यह ध्यान में रखते हुए कि हमारे पास Set<String> stringSet हम जावा 8 में निम्नलिखित एक लाइनर का उपयोग कर सकते हैं:

import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());

विधि toList() लिए doc अनुसार toList()

लौटाई गई सूची के प्रकार, परिवर्तनशीलता, क्रमिकता, या थ्रेड-सुरक्षा पर कोई गारंटी नहीं है; यदि लौटाई गई सूची पर अधिक नियंत्रण आवश्यक है, तो चयन (प्रदायक) का उपयोग करें।

तो अगर हमें एक विशिष्ट कार्यान्वयन की आवश्यकता है जैसे कि ArrayList हम इसे इस तरह से प्राप्त कर सकते हैं:

List<String> stringList2 = stringSet.stream().
                              collect(toCollection(ArrayList::new));

जावा 8 का प्रयोग (अनमोडिफाइड सूचियां)

हम Collections::unmodifiableList विधि का उपयोग कर सकते हैं और पिछले उदाहरणों में लौटाई गई सूची को लपेट सकते हैं। हम अपनी खुद की कस्टम विधि भी लिख सकते हैं:

class ImmutableCollector {
    public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
            return Collector.of( supplier, List::add, (left, right) -> {
                        left.addAll(right);
                        return left;
                    }, Collections::unmodifiableList);
        }
}

और फिर इसे इस प्रकार उपयोग करें:

List<String> stringList3 = stringSet.stream()
             .collect(ImmutableCollector.toImmutableList(ArrayList::new)); 

एक और संभावना collectingAndThen करने के लिए collectingAndThen विधि का उपयोग करना है जो परिणाम लौटने से पहले कुछ अंतिम परिवर्तन करने की अनुमति देता है:

    List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
      toCollection(ArrayList::new),Collections::unmodifiableList));

मैं वर्तमान में यह कर रहा हूं:

Set<String> setOfTopicAuthors = ....

List<String> list = Arrays.asList( 
    setOfTopicAuthors.toArray( new String[0] ) );

क्या आप इसे हरा सकते हैं?


यदि आप अमरूद का उपयोग कर रहे हैं, तो आप सांख्यिकीय रूप से Lists क्लास से newArrayList विधि आयात newArrayList :

List<String> l = newArrayList(setOfAuthors);

Set लिए इसे आज़माएं:

Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors); 

Map लिए इसे आज़माएं:

Map<String, String> listOfTopicAuthors = .....
// List of values:
List<String> mapValueList = new ArrayList<String>(listOfTopicAuthors.values());
// List of keys:
List<String> mapKeyList = new ArrayList<String>(listOfTopicAuthors.KeySet());

List<String> l = new ArrayList<String>(listOfTopicAuthors);






jdk1.6