(Java -> Kotlin) Как я могу конвертировать этот код? (Поток, фильтр) - PullRequest
0 голосов
/ 11 февраля 2020

У меня проблема с Java -> Kotlin преобразованием .. Как я могу преобразовать этот код?

String[] allLongestStrings(String[] inputArray) {

    int mL = 0 ; 

    for(int i =0; i < inputArray.length; i++){

        if(mL<inputArray[i].length())
            mL = inputArray[i].length();
    }

    final int longest = mL;

    return Stream.of(inputArray)
        .filter(s -> s.length()==longest)
        .toArray(String[]:: new);    
}

Я особенно хочу изменить эту часть.

return Stream.of(inputArray)
        .filter(s -> s.length()==longest)
        .toArray(String[]:: new); 

, пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2020

Я бы предложил сделать это так просто:

fun allLongestStrings(inputArray: Array<String>): Array<String> {
    val longest = inputArray.maxBy { it.length }?.length
    return inputArray.filter { it.length == longest }.toTypedArray()
}
0 голосов
/ 11 февраля 2020

Вы пробовали использовать функцию IntelliJ automati c?

Вероятно, это будет что-то вроде:

    internal fun allLongestStrings(inputArray: Array<String>): Array<String> {

        var mL = 0

        for (i in inputArray.indices) {

            if (mL < inputArray[i].length)
                mL = inputArray[i].length
        }

        val longest = mL

        return inputArray.filter { s -> s.length == longest }.toTypedArray()

    }
0 голосов
/ 11 февраля 2020
    var mL = 0;

    val inputArray = Array<String>();
    for (i in 0 until inputArray.size) {
        if (mL < inputArray[i].length)
            mL = inputArray[i].length
    }

    val longest: Int = mL
    inputArray.filter {
        it.length == longest
    }

Java против Kotlin В Java 8 новый модный API можно использовать только при взаимодействии с java .util.stream.Stream экземплярами.

Хорошо, что все стандартные коллекции - все, что реализует java .util.Collection - имеют определенный метод stream (), который может создавать экземпляр Stream.

Важно помнить, что Поток не является коллекцией. Он не реализует java .util.Collection и не реализует никакой обычной семантики коллекций в Java. Он больше похож на одноразовый итератор в том смысле, что он является производным от коллекции и используется для его обработки, выполнения операций над каждым видимым элементом.

В Kotlin все типы коллекций уже поддерживать эти операции без необходимости сначала конвертировать их. Преобразование необходимо только в том случае, если семантика коллекции неверна - например, набор имеет уникальные элементы, но неупорядочен.

Одним из преимуществ этого является отсутствие необходимости первоначального преобразования из коллекции в поток и нет необходимости окончательного преобразования из потока обратно в коллекцию - с помощью вызовов collect ().

ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...