Ich mache z.B. gerade folgendes:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
Kannst du das schlagen?
Jacques Rene Mesrine
Ich mache z.B. gerade folgendes:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
Kannst du das schlagen?
List<String> list = new ArrayList<String>(listOfTopicAuthors);
… und sich damit radikal den Java-Code-Konventionen widersetzt: oracle.com/technetwork/java/javase/documentation/… ! 🙂 🙂
– Håvard Geithus
1. Februar 2014 um 0:49 Uhr
Danach, als ich versuchte, auf das Listenelement zuzugreifen, gab es den Fehler “java.lang.ClassCastException: java.lang.Integer kann nicht in java.lang.String umgewandelt werden” … weiß nicht warum … es ist einfach list.get (int) das ist es … irgendwelche Vorschläge?
– Code
20. Juni 2014 um 17:45 Uhr
Ich glaube, in Java 7 und höher können Sie den Typparameter weglassen ArrayList
nachgeben: List<String> l = new ArrayList<>(listOfTopicAuthors);
Am prägnantesten ohne Verwendung einer externen Bibliothek?
– Brett Duncavage
30. Oktober 2014 um 19:37 Uhr
In diesem Fall wird eine NullPointerException ausgelöst listOfTopicAuthors
ist Null.
– w35l3y
30. August 2016 um 20:33 Uhr
List<String> l = new ArrayList<String>(listOfTopicAuthors);
für das Antworten in derselben Minute wie die akzeptierte Antwort und das Nichterhalten des Credentials. +1
– jayeffkay
4. Dezember 2015 um 12:10 Uhr
@Adamski Am Ende habe ich eine Liste, deren Index bei 1 statt bei 0 beginnt, gibt es Abhilfe?
– Jack
18. Februar 2016 um 22:49 Uhr
@Jack: Das wird definitiv nicht der Fall sein. Aus dem Javadoc von java.util.List: “Listen (wie Java-Arrays) sind nullbasiert.”
– Adamsky
19. Februar 2016 um 14:55 Uhr
@Adamski Danke für die Antwort. Ich weiß, dass Listen nullbasiert sein sollten und sind, weshalb das für mich so seltsam ist. Nachdem ich meinen Satz in eine Liste konvertiert habe, kann ich keine iterativen Operationen für jeden ausführen, sortieren usw. Ich erhalte eine NullPointerException, aber wenn ich erwarte, dass meine Liste keines der Elemente null ist, und das einzige Seltsame, das ich bemerke, ist, dass die Index beginnt bei 1. Wenn ich jedoch nur eine normale Liste erstelle, beginnt der Index bei 0. Seltsam?
– Jack
19. Februar 2016 um 15:04 Uhr
@Jack: Das klingt sehr seltsam. Wenn Sie Ihren Code als separate Frage posten, kann Ihnen sicher jemand helfen.
– Adamsky
22. Februar 2016 um 8:54 Uhr
akhil_mittal
Wenn man bedenkt, dass wir haben Set<String> stringSet
wir können folgendes verwenden:
List<String> strList = new ArrayList<>(stringSet);
List<String> strList = Lists.newArrayList(stringSet);
List<String> strList = new ArrayList<>();
CollectionUtils.addAll(strList, stringSet);
List<String> strList = List.copyOf(stringSet);
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Gemäß der Dok für die Methode toList()
Es gibt keine Garantien für Typ, Veränderbarkeit, Serialisierbarkeit oder Thread-Sicherheit der zurückgegebenen Liste; Wenn mehr Kontrolle über die zurückgegebene Liste erforderlich ist, verwenden Sie toCollection(Supplier).
Wenn wir also eine bestimmte Implementierung benötigen, z ArrayList
wir können es so bekommen:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
können wir nutzen Collections::unmodifiableList
-Methode und umbrechen Sie die Liste, die in den vorherigen Beispielen zurückgegeben wurde. Wir können auch unsere eigene benutzerdefinierte Methode schreiben als:
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);
}
}
Und dann verwenden Sie es als:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Eine weitere Möglichkeit ist die Nutzung collectingAndThen
Methode, mit der eine letzte Transformation durchgeführt werden kann, bevor das Ergebnis zurückgegeben wird:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Einer Punkt zu beachten ist das die methode Collections::unmodifiableList
gibt eine unveränderbare Ansicht der angegebenen Liste zurück, wie per Dok. Eine nicht modifizierbare Ansichtssammlung ist eine Sammlung, die nicht änderbar ist und auch eine Ansicht auf eine Hintergrundsammlung darstellt. Beachten Sie, dass Änderungen an der Sicherungssammlung möglicherweise noch möglich sind und dass sie, wenn sie auftreten, in der nicht änderbaren Ansicht sichtbar sind. Sondern die Kollektormethode Collectors.unmodifiableList
gibt eine wirklich unveränderliche Liste in zurück Java 10.
Ich habe dies verwendet, um a zu konvertieren Set<Double>
zu einem List<Double
woher der Satz kam a LinkedHashMap
‘s .keySet()
Methode. Eclipse teilte mir mit, dass es einen Typkonflikt gab und ich nicht konvertieren konnte Object
zu List<Double>
. Können Sie mir sagen, warum das passiert sein könnte? Ich habe es durch Casting umgangen, aber ich habe mich gefragt, warum es passiert.
– Ungeheuer
4. Januar 2016 um 2:09 Uhr
Ja, da Java-Entwickler immer mehr Java 8-Funktionen verwenden sollten, ist diese Antwort besser als die beiden obigen Antworten.
– Shubham Pandey
2. Oktober 2017 um 7:28 Uhr
Prabhakar Manthena
Versuchen Sie dies für Satz:
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
Versuchen Sie dies für Karte:
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());
Wenn Sie Guava verwenden, importieren Sie statisch newArrayList
Methode aus Listen Klasse:
List<String> l = newArrayList(setOfAuthors);
jp093121
nicht wirklich sicher, was Sie genau über den Kontext Ihres Codes tun, aber …
warum machen die listOfTopicAuthors
überhaupt variabel?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
das “….” stellt dar, wie auch immer Ihr Set ins Spiel kam, egal ob es neu ist oder von einem anderen Ort stammt.
Verwenden
java.util.Collection
: O(0)– Tim
23. Februar 2010 um 15:56 Uhr
@Carl, ich muss das Set an eine Schnittstelle eines Drittanbieters senden, für die eine Liste erforderlich ist. @Tim Ich wünschte, ich könnte die Schnittstelle des Drittanbieters ändern, um Collection zu verwenden.
– Jacques René Mesrine
24. Februar 2010 um 2:08 Uhr
Aha; Abgesehen von seltsamen Einschränkungen würde ich Rogers Antwort folgen. Wenn Sie die Liste jedoch nicht erneut verwenden, würde ich die Zuweisung zu irgendetwas überspringen (dh verwenden Sie foo.api (new ArrayList (listOfTopicAuthors)) anstelle von foo.api (list)).
– Carl
24. Februar 2010 um 15:26 Uhr
@JacquesRenéMesrine: Die erste fragliche Codezeile ist irreführend: Erwartet:
Set<String> setOfTopicAuthors = ....
Tatsächlich:Set<String> listOfTopicAuthors = ....
– realPK
18. Februar 2017 um 20:24 Uhr
Oder ein alternativer Weg, dasselbe zu tun, könnte sein
List<String> list = Arrays.asList(setOfTopicAuthors.toArray(String[]::new))
detailliert in der verlinkten Antwort.– Namann
26. Juli 2018 um 19:02 Uhr