Компаратор как лямбда

У меня есть следующий метод в библиотеке Java :

public void setColumnComparator(final int columnIndex, final Comparator<T> columnComparator) 

Идея говорит, что у него есть следующий проретип:

 setColumnComparator(columnIndex: Int, columnComparator: ((Any!, Any!) -> Int)!) 

Как я могу использовать его? Я знаю, что это будет String , поэтому я хочу что-то вроде этого, но он не компилируется.

 setColumnComparator(0, Comparator<String> { a, b -> a.compareTo(b) } 

Если вы посмотрите более внимательно, вам необходимо передать компаратор, который сравнивает полные значения, а не значения в столбце. SortableTableView<Car> тип данных в вашей таблице – это Car (так что у вас есть SortableTableView<Car> ), а первый столбец содержит имена моделей. Тогда вы напишете

 setColumnComparator(0, { a, b -> a.modelName.compareTo(b.modelName) } 

Или лучше:

 setColumnComparator(0, compareBy({ it.modelName }) 

(см. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/compare-by.html )

Из SortableTableView<Any> IDEA подписи у вас может быть SortableTableView<Any> или SortableTableView<*> . Это действительно должно быть изменено на более конкретный тип. Но даже без этого, если бы у вас был Car или Book :

 compareBy({ (it as? Car)?.modelName }, { (it as? Book)?.title }) 

Если вы точно знаете, что ваш общий параметр типа SortableTableView является String , вы можете SortableTableView<String> его в SortableTableView<String> а затем сделать вызов:

 (tableView as SortableTableView<String>).setColumnComparator(1, { x, y -> x.compareTo(y) }) 

В качестве альтернативы вы можете указать параметры, которые Comparator :

 tableView.setColumnComparator(1, { x, y -> (x as String).compareTo(y as String) })