java до kotlin проблема языкового перевода со взаимно изменяющимися списками - PullRequest
0 голосов
/ 31 января 2020

Я перевел следующий java фрагмент к kotlin:

JAVA:

    List<Double> xSecRaw = new ArrayList();
    // Create a HashSet which allows no duplicates
    hashSet = new HashSet(xSecRaw);

    // Assign the HashSet to a new ArrayList
    xSec = new ArrayList(hashSet);

    // Ensure correct order, since HashSet doesn't
    Collections.sort(xSec);

Kotlin:

    val xSecRaw: MutableList<Double?> = ArrayList<Double?>()

    // Create a HashSet which allows no duplicates
    hashSet = HashSet<Any?>(xSecRaw)

    // Assign the HashSet to a new ArrayList
    xSec = ArrayList<Any?>(hashSet) // <--- this line gives error!

    // Ensure correct order, since HashSet doesn't
    Collections.sort(xSec)

ошибка is:

Несоответствие типов.

Обязательно: MutuableList

Найдено: ArrayList

любая подсказка?

Я хочу устранить дубликаты в xSecRaw и сортировать их

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Эта ошибка возникает из-за того, что вы используете необработанные типы в своем коде Java (вы используете HashSet(....) вместо HashSet<SomeType>(....)), а необработанные типы преобразуются в типы, которые используют Any? в качестве их обобщенного c типа, и MutableList нельзя назначить MutableList (как вы пытаетесь сделать в ошибочной строке). Если вы измените свой код Java следующим образом:

List<Double> xSecRaw = new ArrayList<>();
// Create a HashSet which allows no duplicates
hashSet = new HashSet<Double>(xSecRaw);

// Assign the HashSet to a new ArrayList
xSec = new ArrayList<Double>(hashSet);

// Ensure correct order, since HashSet doesn't
Collections.sort(xSec);

Тогда он, вероятно, будет переведен в такой код:

val xSecRaw: MutableList<Double?> = ArrayList<Double?>()

// Create a HashSet which allows no duplicates
hashSet = HashSet<Double?>(xSecRaw)

// Assign the HashSet to a new ArrayList
xSec = ArrayList<Double?>(hashSet) // <--- this line gives error!

// Ensure correct order, since HashSet doesn't
Collections.sort(xSec)

И этот код будет работать (вы должны изменить Double? на Double если в вашей коллекции нет нуля Double s)

Также, если вы хотите удалить дубликаты из списка и отсортировать их, вы можете просто написать

xSec = xSecRaw.distinct().sorted()

вместо всего вашего кода.

0 голосов
/ 31 января 2020

Изменить на это:

val xSecRaw: MutableList<Double?> = mutableListOf<Double?>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...