小编Anl*_*rke的帖子

是否可以从Java访问Kotlin类型?

假设我有一个typealias像这样的Kotlin函数类型的Kotlin 1.1

typealias Consumer<T> = (T) -> Unit
Run Code Online (Sandbox Code Playgroud)

我可以从Java访问它

import kotlin.Unit;
import kotlin.jvm.functions.Function1;

Function1<? super T, Unit> action = ...
Run Code Online (Sandbox Code Playgroud)

是否有可能Function1以其Kotlin类型名称(即Consumer)从Java 访问Kotlin 接口?

java kotlin kotlin-interop

11
推荐指数
1
解决办法
2006
查看次数

Java-8:如何使用Map.Entry#comparisonByValue对Map进行排序(基于值)而忽略区分大小写?

我想按字母顺序对值进行排序,忽略区分大小写并返回键列表.

 /**
   * This method will sort allCostPlanDetailsRows based on Value in <Key,Value> pair
   *
   * @param sortingOrder_ whether to sort the LinkedHashMap in Ascending order or Descending order
   * @return List<String> returns List of costPlanDetailsRowId in sorted order
   */
  private List<String> sortCostPlanDetailRows( SortingOrder sortingOrder_ )
  {
    return _allCostPlanDetailRows
      .entrySet()
      .stream()
      .sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(Comparator.naturalOrder())).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
          Comparator.naturalOrder())) )
      .map( Map.Entry::getKey )
      .collect( Collectors.toList() );
  }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

注意:如果我可以改进上面的代码,欢迎提出建议.

java string case-insensitive java-8 java-stream

5
推荐指数
1
解决办法
672
查看次数

Stream.concat错误的解决方法

注释掉Stream.concat时,createLazyStream按预期工作,仅在应用终端操作时初始化.

但是如果你取消注释Stream.concat行,那么你会看到即使没有实际使用也没有初始化两个流(没有应用终端操作)

这是java bug,对吧?什么是变通方法?

@Test
public void testConcat() {

    Stream<Integer> stream = createLazyStream();
    // Stream<Integer> result = Stream.concat(stream, createLazyStream());

}

private Stream<Integer> createLazyStream() {
    return StreamSupport.stream(() -> {

        System.out.println("initializing stream");
        return IntStream.range(1,10).spliterator();

    }, Spliterator.ORDERED, false);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

1
推荐指数
1
解决办法
218
查看次数

Java Stream:按 ZoneDateTime 字段排序

我想按 ZoneDateTime 字段以相反顺序对列表进行排序,将计数限制为 20

    public class VisitViewDTO implements Serializable {
      private ZonedDateTime visitDate;
      private int count;

      public ZonedDateTime getVisitDate() {
        return visitDate;
    }
}
Run Code Online (Sandbox Code Playgroud)

……

List<VisitViewDTO> visitViewDTOList;

visitViewDTOList.stream().sorted(Comparator.comparing(VisitViewDTO::getVisitDate).reversed()).limit(20).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但得到了NPE:

java.lang.NullPointerException: null
    at java.time.chrono.ChronoZonedDateTime.compareTo(ChronoZonedDateTime.java:570)
    at java.time.chrono.ChronoZonedDateTime.compareTo(ChronoZonedDateTime.java:121)
    at java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469)
    at java.util.Collections$ReverseComparator2.compare(Collections.java:5178)
    at java.util.TimSort.countRunAndMakeAscending(TimSort.java:356)
    at java.util.TimSort.sort(TimSort.java:220)
    at java.util.Arrays.sort(Arrays.java:1512)     
Run Code Online (Sandbox Code Playgroud)

java lambda java-stream

1
推荐指数
1
解决办法
7706
查看次数