Tag: java 8

没有参数且没有返回值的Java 8函数接口

什么是不需要任何东西并且什么都不返回的方法的Java 8函数接口? 即,相当于C#无参数Action与void返回types?

recursionConcurrentHashMap.computeIfAbsent()调用永不终止。 错误或“function”?

前些时候, 我已经写了一个Java 8函数recursion计算 computeIfAbsent() 数字的方法 ,用一个ConcurrentHashMapcaching和新的有用的computeIfAbsent()方法: import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Test { static Map<Integer, Integer> cache = new ConcurrentHashMap<>(); public static void main(String[] args) { System.out.println( "f(" + 8 + ") = " + fibonacci(8)); } static int fibonacci(int i) { if (i == 0) return i; if (i == 1) return 1; […]

CompletableFuture,Future和RxJava的Observable之间的区别

我想知道CompletableFuture , Future和Observable RxJava之间的区别。 我所知道的都是asynchronous的,但是 Future.get()阻塞线程 CompletableFuture给出了callback方法 RxJava Observable —与CompletableFuture类似,具有其他好处(不确定) 例如:如果客户端需要进行多个服务调用,并且当我们使用Futures (Java)时, Future.get()将会按顺序执行…想知道RxJava如何更好。 而文档http://reactivex.io/intro.html说 使用Futures来优化组合有条件的asynchronous执行stream是困难的(或者不可能,因为每个请求的延迟在运行时间上是不同的)。 这当然可以做到,但是它很快变得复杂(并且因此容易出错),或者它过早地阻塞了Future.get(),这消除了asynchronous执行的好处。 真的有兴趣知道如何RxJava解决这个问题。我发现很难从文档中理解。请帮助!

在Ubuntu上从JDK 1.7转移到JDK 1.8

我在UBUNTU。 目前安装的JDK版本是: java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) 正在安装的configuration是: sudo update-alternatives –config java There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-7-oracle/jre/bin/java 我下载了JDK 1.8的最新tar.gz存档。 我怎样才能从tar.gz轻松地安装JDK 1.8覆盖/卸载当前安装的JDK 1.7? 甚至没有明确使用tar.gz.

如何使用Java8 lambda按相反顺序对stream进行sorting?

我使用java lambdasorting列表。 我怎样才能以相反的方式sorting呢? 我看到这个post ,但我想用java 8 lambda。 这里是我的代码(我用* 1)作为黑客 Arrays.asList(files).stream() .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName())) .sorted(new Comparator<File>() { public int compare(File o1, File o2) { int answer; if (o1.lastModified() == o2.lastModified()) { answer = 0; } else if (o1.lastModified() > o2.lastModified()) { answer = 1; } else { answer = -1; } return -1 * answer; […]

为什么我不能将整数映射到string从数组中stream式传输?

此代码工作(采取在Javadoc): List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); 这个不能编译: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", ")); IDEA告诉我,我有一个“在lambdaexpression式中不兼容的返回typesstring”。 为什么? 以及如何解决这个问题?

以单线forms获取Stream / List的最后一个元素

如何获得下面的代码中的stream或列表的最后一个元素? where data.careas是一个List<CArea> : CArea first = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal).findFirst().get(); CArea last = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal).collect(Collectors.toList()).; //how to? 正如你所看到的第一个元素,用一个特定的filter ,并不难。 然而,让单线的最后一个元素是一个真正的痛苦: 看来我无法直接从Stream获取它。 (这只对有限的stream才有意义) 也似乎你不能从List接口得到first()和last()这样的东西,这真的很痛苦。 我没有看到在List接口中没有提供first()和last()方法的任何参数,因为那里的元素是有序的,而且大小是已知的。 但按照原来的答案:如何获得有限的Stream的最后一个元素? 就个人而言,这是我能得到的最接近的: int lastIndex = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal) .mapToInt(c -> data.careas.indexOf(c)).max().getAsInt(); CArea last = data.careas.get(lastIndex); 但是,它确实涉及到在每个元素上使用indexOf ,这很可能不是您通常想要的,因为它可能会影响性能。

LocalDate到java.util.Date,反之亦然最简单的转换?

有没有一种简单的方法将LocalDate (随Java 8引入)转换为java.util.Date对象? 通过“简单”,我的意思是比这更简单: Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 这对我来说似乎有些尴尬。 既然我们只对date部分感兴趣,而且在这两个对象中都没有时区信息,为什么要明确地引入时区呢? 对于转换,午夜时间和系统默认时区应该被隐式地采用。

`Optional.orElse()`和`Optional.orElseGet()`之间的区别

我想了解Optional<T>.orElse()和Optional<T>.orElseGet()方法之间的区别。 orElse()方法的描述是“返回值如果存在,否则返回其他”。 而orElseGet()方法的描述是“返回值,如果存在,否则调用其他值并返回该调用的结果”。 orElseGet()方法采用供应商function接口,基本上不采用任何参数并返回T 在哪种情况下你需要使用orElseGet() ? 如果你有一个方法T myDefault()为什么你不只是做optional.orElse(myDefault())而不是optional.orElseGet(() -> myDefault()) ? orElseGet()似乎并没有推迟lambdaexpression式的执行到某个更晚的时间或什么,所以它有什么意义呢? (我会认为它会更有用,如果它返回一个更安全的Optional<T>其get()永远不会抛出一个NoSuchElementException和isPresent()总是返回true …但显然它不是,它只是返回T like orElse() )。 还有一些其他的差异我失踪了吗?

Java 8中的抽象类和接口有什么区别?

在Java中,抽象类和接口之间是微妙而重要的区别: 默认实现 。 抽象类可以有他们,接口不能。 虽然Java 8引入了接口的默认实现,这意味着这不再是接口和抽象类之间的关键区别。 那么是什么? 尽我所知,唯一剩下的差别(除了可能是一些效率下面的东西),抽象类遵循传统的Java单一inheritance,而接口可以有多重inheritance(或多重实现,如果你愿意的话)。 这导致我另一个问题 – 新的Java 8接口如何避免钻石问题 ?