Tag: 排序

Kotlin:排序| 交换操作的位置

我在Kotlin中实现了Quicksort算法。 为此,我使用类型参数和单个函数( sort)创建了一个接口ISort 。 为了排序,我需要交换操作。 我想知道这个交换功能的最佳位置是什么。 我的想法: 1)不幸的是,在Kotlin中,不能使接口功能得到保护。 因此,每个班级都可以在其实施中看到交换,这并不太好(尽管也不算太差,我同意)。 2)把它放在QuickSort实现中更糟,因为可能有几个需要交换功能的ISort接口的实现。 3)我的下一个想法是创建一个单例对象,但Kotlin允许具有类型参数的对象。 这里是接口定义: interface ISort<T> { fun sort(toSort: MutableList<T>): MutableList<T> // 1) Putting swap here has a too high visibility } 这里是QuickSort类的框架: class QuickSort<T> : ISort<T> { override fun sort(toSort: MutableList<T>): MutableList<T> { doQuickSort(toSort) // Internally uses swap return toSort } // 2) Putting swap here […]

Kotlin – 使用格式化日期字符串排序列表(功能)

我正在尝试创建一个Kotlin REST API,它从PostgreSQL数据库中检索值。 现在这些结果的值是fe "14-10-2016 | 15:48"和"01-08-2015 | 09:29"所以语法基本上是dd-MM-yyyy | hh:mm dd-MM-yyyy | hh:mm 现在我想要做的是创建一个函数,将按日期排序。 (假设这些字符串是在一个数组中) var list = listOf("14-10-2016 | 15:48", "01-08-2015 | 09:29", "15-11-2016 | 19:43") 什么是最清洁(和最功能)的方式来排序这些? (所以有没有一种方法,我不必采取一天,一个月的子字符串,等他们转换为一个Int ,比较它们在嵌套循环,并将结果写入不同的数组?(这是唯一的方法我能想到)。

按字符和长度排序字符串

在我的Android应用程序中,我尝试按1,2,3,4等排序总线路由标记。 为此,我正在使用这个 Collections.sort(directions, Comparator { lhs, rhs -> var obj1 = lhs.short_names.firstOrNull() ?: "" var obj2 = rhs.short_names.firstOrNull() ?: "" if (obj1 === obj2) { obj1 = lhs.headsigns.firstOrNull() ?: "" obj2 = rhs.headsigns.firstOrNull() ?: "" if (obj1 === obj2) { return@Comparator 0 } obj1.compareTo(obj2) } else { obj1.compareTo(obj2) } 我所遇到的问题是这样的,但会遇到1,2,3,31,3,4,5 我应该如何改变这个来获得正确的顺序。

根据另一个列表的顺序排序列表

我需要排序一个Person对象List<Person> ( List<Person> ,其中每个Person对象具有像id (唯一), name , age等少数属性)。 排序顺序是基于另一个列表。 该列表包含一组Person id (已被排序的List<String> )。 使用Kotlin或Java以与id列表相同的顺序排列List<Person>的最好方法是什么? 例: List Person { (“ID1”,”PERSON1”,22,..), (“ID-2”,”PERSON2”,20,..) ), (“ID-3”,”PERSON3”,19,..),….. } 有序Id列表: List of ID {(“ID2”), (“ID1”),(”ID3”)….} 排序Person列表应该是: List PERSON { (“ID-2”,”PERSON 2”,20,..) ), (“ID1”,”PERSON 2”,22,..), (“ID-3”,”PERSON 2”,19,..),….. } 如果Person列表包含id列表中没有提到的任何id ,那么这些值应该在排序列表的末尾。 编辑:这是我目前在Java中的方式。 我希望有一个比这更好的方法: public static List<Person> getSortList(List <Person> unsortedList, List<String> orderList){ if(unsortedList!=null && […]

Android Kotlin不能在lambda中使用list.sort()

有一个字符串列表,用于过滤直接使用lambda表达式 val list= ArrayList<String>() list.add("eee") list.add("888") list.add("ccc") list.filter({it.length > 0}) // this passing function works too list.filter(fun(it) = it.length > 0) 它被定义为采用lambda函数类型: (T) -> Boolean public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> { return filterTo(ArrayList<T>(), predicate) } 但类似的语法不适用于sort() 。 它要求使用sortWith来代替。 不明白为什么不能直接在filter()调用中传递lambda表达式。 有人可以解释为什么sort()不能直接使用lambda函数的类似语法? list.sort({ first: String, second: String -> first.compareTo(second) }) list.sort定义如下,同样采用lambda函数: (T, T) […]

Kotlin – 基于对象属性对MutableList进行排序

我有这个令牌对象: class Token(type: TokenType, value: String, position: IntRange = 0..0) 我声明一个MutableList: val tokens: MutableList<Token> = mutableListOf() // Mutable List filled 现在我想根据位置IntRange的第一个值对我的列表进行排序。 我试过这样做: tokens .sortedBy { it.position.first } 但是,在使用it关键字后,我无法访问该对象,所以位置以红色突出显示。 有什么建议么?

Kotlin在类中基于类var的排序数组

我很难找到正确的代码排序我的数组。 在我的数组里面有一个我创建的类的数组。 在类内部,有一个名为Rank的变量,它包含一个Int。 我想根据类中的数字(从最高到最低)对我的数组进行排序。 我是Kotlin语言的新手,但使用Swift语言。 Swift代码等价于我试图实现的是: TrendingArray.sort(by: {$0.Rank > $1.Rank})

如何通过Kotlin中的值对LinkedHashMap进行排序?

按键我可以使用排序 map.toSortedMap() 但是,在Kotlin中通过值排序LinkedHashMap的最好方法是什么?

Kotlin多标准排序不编译

这个简单的场景 data class Person(var name:String, var age:Int) var people = listOf( Person("Adam", 36), Person("Boris", 18), Person("Claire", 36), Person("Adam", 20), Person("Jack", 20) ) println(people.sortedBy{compareBy{Person::age, Person::name}}) 不用编译 错误:(27,29)Kotlin:类型推断失败:没有足够的信息推断inline> fun compareBy(crossinline selector:(T) – > Comparable <*>?)比较器请明确指定它。 将其更改为 println(people.sortedBy{compareBy<Person>{Person::age, Person::name}}) 不工作,也没有工作 println(people.sortedBy{compareBy<Person>{Person::age}.thenBy { Person::name }}) 给 错误:(28,20)Kotlin:内联fun类型参数绑定到R> Iterable.sortedBy(十字交叉选择符:(T) – > R?):不满足列表:推测类型Comparator不是Comparable> 那么我也尝试了多功能重载 println(people.sortedBy{compareBy<Person>({it.age}, {it.name})}) 这就产生了 错误:(28,20)Kotlin:内联fun类型参数绑定到R> Iterable.sortedBy(十字交叉选择符:(T) – > […]

Kotlin最后排序为空

什么是一个Kotlin的方式来排序空对象的列表与null为空最后? Kotlin对象进行排序: @JsonInclude(NON_NULL) data class SomeObject( val nullableField: String? ) 类似于下面的Java代码: @Test public void name() { List<SomeObject> sorted = Stream.of(new SomeObject("bbb"), new SomeObject(null), new SomeObject("aaa")) .sorted(Comparator.comparing(SomeObject::getNullableField, Comparator.nullsLast(Comparator.naturalOrder()))) .collect(toList()); assertEquals("aaa", sorted.get(0).getNullableField()); assertNull(sorted.get(2).getNullableField()); } @Getter @AllArgsConstructor private static class SomeObject { private String nullableField; }