2017-04-18 2 views
0

ich ein Stück Code haben wie folgt:von Scala.WrappedArray auf eine Liste Konvertieren von <>

List<Integer> indexes = joinedCols 
      .map(x-> ((Tuple2)x)._1) 
      .collect(); 

    return indexes; 

würde ich indexes erwarten List<Integer> jedoch vom Typ sein, wenn ich es mit einem Debugger prüfe ich sehen es ist eine Art von WrappedArray. Es verhält sich also nicht wie ein List und verursacht Fehler, wenn ich über die zurückgegebene Liste als for (Integer i : indexes) traversieren möchte. Wie kann ich in diesem Fall die zugrunde liegende Liste als eine Art List<Integer> zurückgeben?

+0

Keine Lösung, aber eine Problemumgehung, die ich gefunden habe, ist über die Liste wie für (Objekt i: Indizes). – SpiderRico

+0

Was ist der Typ von joinedCols? – puhlen

+0

@puhlen JavaPairRDD – SpiderRico

Antwort

1

jedoch, wenn ich es mit einem Debugger prüfe ich sehen, es ist eine Art von WrappedArray

Was Sie im Debugger sehen, ist die Klasse des Wertes, aber es implementiert die List Schnittstelle. Es verhält sich also wie ein List (aber beachten Sie, dass viele Operationen in List Schnittstelle optional sind und hier nicht unterstützt werden).

und verursacht Fehler, wenn ich die zurückgegebene Liste als for (Integer i : indexes)

überfahren wollen, das ist, weil Sie durch Gießen zu rohen Tuple2 die Typinformationen entfernen. Angenommen, Sie haben eine JavaPairRDD<Integer, SomeType>, nur die Besetzung entfernen sollte Ihnen eine List<Integer> geben und Iteration wie folgt zulassen.

Verwandte Themen