Эквивалент потока в Kotlin - PullRequest
0 голосов
/ 21 февраля 2020

Что эквивалентно этому коду kotlin?

stack = stack.stream()
    .map(e -> // some code here)
    .collect(Collectors.toCollection(ArrayDeque::new));

У меня есть этот

stack = stack.withIndex()
    .map { (i, v) -> {
        // some code here
    }}
    .toCollection(ArrayDeque::new)

Я не могу разрешить ArrayDeque :: new part. Как это сделать в kotlin?

Обновление

Это мой оригинальный код, и я работаю для стека, используя ArrayDeque, мне нужно обновить стек по указанным c index from 0. Теперь я получил ошибку, что не могу присвоить код, предложенный ниже, стеку

var stack = ArrayDeque<Long>()

for (op in operations){
    val split = op.split(' ')
    when (split[0]) {
        "push" -> {
            stack.push(split[1].toLong())
        }
        "pop" -> {
            stack.pop()
        }
        else -> {
            stack = stack.withIndex()
                .map { (i, v) -> {
                    if (i < split[1].toInt())
                        v + split[2].toLong()
                    else
                        v
                }}
                .toCollection(ArrayDeque())
        }
    }

    if (stack.isEmpty()){
        println("EMPTY")
    } else {
        println(stack.peekFirst()!!)
    }
}

Вот ошибка

error: type inference failed. Expected type mismatch: inferred type is ArrayDeque<Long> but ArrayDeque<Long> was expected

1 Ответ

0 голосов
/ 21 февраля 2020

На ваш выбор:

stack.withIndex()
  .map { (i, v) -> {  /* code */  }}
   .toCollection(ArrayDeque()) 

ИЛИ

stack.withIndex()
    .mapTo(ArrayDeque()) { (i, v) -> { /* code  */ } }

Я бы подождал секунду, если у вас только один сингл map, но если у вас более длинная цепь, я ' д go для toCollection.

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