Qual é o equivalente Kotlin da String [] do Java?

164

Vejo que o Kotlin possui ByteArray, ShortArray, IntArray, CharArray, DoubleArray, FloatArray, que são equivalentes byte[], short[], int[],char[], double[], float[]em Java.

Agora estou me perguntando, existe algum StringArrayequivalente ao Java String[]?

chancyWu
fonte
7
typealias StringArray = Array<String>;)
marstran

Respostas:

225

Não há nenhum caso especial para String, porque Stringé um tipo de referencial comum na JVM, em contraste com primitivos Java ( int, double...) - armazená-los em uma referência Array<T>requer boxe-los em objetos como IntegereDouble . O objetivo de matrizes especializadas, como IntArrayno Kotlin, é armazenar primitivas sem caixa, eliminando as despesas gerais de box e unboxing (o mesmo que Java em int[]vez deInteger[] ).

Você pode usar Array<String>(e Array<String?>para anuláveis), o que é equivalente String[]em Java:

val stringsOrNulls = arrayOfNulls<String>(10) // returns Array<String?>
val someStrings = Array<String>(5) { "it = $it" }
val otherStrings = arrayOf("a", "b", "c")

Veja também: Matrizes na referência de idioma

tecla de atalho
fonte
18

use arrayOf , arrayOfNulls , emptyArray

var colors_1: Array<String> = arrayOf("green", "red", "blue")
var colors_2: Array<String?> = arrayOfNulls(3)
var colors_3: Array<String> = emptyArray()
Dan Alboteanu
fonte
16

Para criar um vazio Array of Stringsno Kotlin, você deve usar uma das seis abordagens a seguir:

Primeira abordagem:

val empty = arrayOf<String>()

Segunda abordagem:

val empty = arrayOf("","","")

Terceira abordagem:

val empty = Array<String?>(3) { null }

Quarta abordagem:

val empty = arrayOfNulls<String>(3)

Quinta abordagem:

val empty = Array<String>(3) { "it = $it" }

Sexta abordagem:

val empty = Array<String>(0, { _ -> "" })
Andy Fedoroff
fonte
9

Esses tipos existem para que você possa criar matrizes dos primitivos, e não dos tipos em caixas. Como String não é uma primitiva em Java, você pode apenas usar Array<String>no Kotlin como o equivalente a um Java String[].

zsmb13
fonte
5

Para Stringse outros tipos, você apenas usa Array<*>. A razão IntArraye outras existem é impedir a autoboxing.

Então, int[]diz respeito a IntArrayonde Integer[]diz respeito Array<Int>.

nhaarman
fonte
1

Algumas das maneiras comuns de criar uma matriz String são

  1. var arr = Matriz (5) {""}

Isso criará uma matriz de 5 cadeias com valores iniciais para serem cadeias vazias.

  1. var arr = arrayOfNulls <String?>(5)

Isso criará uma matriz de tamanho 5 com valores iniciais como nulos. Você pode usar dados da String para modificar a matriz.

  1. var arr = arrayOf ("zero", "um", "dois", "três")

Quando você já conhece o conteúdo da matriz, pode inicializar a matriz diretamente.

  1. Também existe uma maneira fácil de criar uma matriz multidimensional de seqüências de caracteres.

    matriz de var = Matriz (5) {Matriz (6) {""}}

    É assim que você pode criar uma matriz com 5 linhas e 6 colunas com valores iniciais de sequência vazia.

Himanshu Garg
fonte
0

Este exemplo funciona perfeitamente no Android

No kotlin, você pode usar uma expressão lambda para isso. A definição do construtor de matriz Kotlin é:

Array(size: Int, init: (Int) -> T)

Qual avalia para:

skillsSummaryDetailLinesArray = Array(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

Ou:

skillsSummaryDetailLinesArray = Array<String>(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

Neste exemplo, a definição de campo foi:

private var skillsSummaryDetailLinesArray: Array<String>? = null

Espero que isto ajude

user2288580
fonte
0

você pode usar também:

val frases = arrayOf("texto01","texto02 ","anotherText","and ")

por exemplo.

João Arthur
fonte