2016-11-25 27 views
14

Nulls ile null ile null nesnelere göre nesnelerin listesini sıralamanın bir Kotlin olması ne olurdu? türKotlin sıralama nulls last

Kotlin nesnesi:

@JsonInclude(NON_NULL) 
data class SomeObject(
    val nullableField: String? 
) 

Analog Java kodu aşağıda:

@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; 
} 

cevap

10

You bu işlevleri kotlin.comparisons'dan kullanabilir paketi: hemen sonra null hepsi boş değil değerlerini koyar o karşılaştırılabilir bir şeyin karşılaştırıcı oluşturur

Bu null un son koyarak nullableField tarafından SomeObject karşılaştıran bir karşılaştırıcı yapalım olacaktır. Daha sonra, karşılaştırıcıyı bir karşılaştırıcı kullanarak bir listeye yinelenen
fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T>'a aktarabilirsiniz:

8

Öyle gibi karşılaştırıcı olarak nullsLastcompareBy kullanabilir ve geçirebilirsiniz:

val elements = listOf(SomeObject("bbb"), SomeObject(null), SomeObject("aaa")) 

val sorted = elements.sortedWith(compareBy<SomeObject,String?>(nullsLast(), { it.name })) 

println(sorted) //-> [SomeObject(name=aaa), SomeObject(name=bbb), SomeObject(name=null)]