Tag: java 8

如何比较数组列表与现代Java的平等?

我有两个数组列表。 如何轻松比较这些与Java 8及其function的平等,而不使用外部库? 我正在寻找比这样的暴力代码更好的(更高级的,更短的,更高效的)解决scheme(未经testing的代码,可能包含错别字等,而不是问题的要点): boolean compare(List<String[]> list1, List<String[]> list2) { // tests for nulls etc omitted if(list1.size() != list2.size()) { return false; } for(i=0; i<list1.size(); ++i) { if(!Arrays.equals(list1.get(i), list2.get(i))) { return false; } } return true; } 或者,如果没有更好的方法,那也是一个有效的答案。 奖金:如果Java 9提供更好的Java 8可以提供的更好的方式,请随时提及它。 编辑:在看了这些注释之后,看看这个问题是如何变得温和的,我认为“ 更好 ”应该包括在检查数组内容之前首先检查所有数组的长度 ,因为如果内部的内部有潜在的不平等数组很长。

获取stream的最后一个元素的最有效的方法

stream没有last()方法: Stream<T> stream; T last = stream.last(); // No such method 什么是最优雅和/或有效的方式来获得最后一个元素(或空的stream空)?

在JRE 8中使用JavaFX

当试图在我的新的Java 8项目中使用javafx相关的类时,我得到了来自eclipse的访问限制错误。 到目前为止,我所能find的唯一“解决scheme”是告诉eclipse忽略访问限制,但是我对此并不满意。 一个错误的例子: Access restriction: The type Pane is not accessible due to restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar 我正在使用Eclipse Kepler和Java JDK的Eclipse JDT补丁。 这似乎是与JavaFX不是JavaSE执行环境的一部分相关的问题。 根据http://en.wikipedia.org/wiki/JavaFX,我现在很困惑,javaFX是JavaSE的一部分。 Eclipse有没有可能认识到它是javaSE的一部分?

有没有办法比较lambdas?

假设我有一个使用lambdaexpression式(闭包)定义的对象列表。 有没有办法检查他们,以便他们可以比较? 我最感兴趣的代码是 List<Strategy> strategies = getStrategies(); Strategy a = (Strategy) this::a; if (strategies.contains(a)) { // … 完整的代码是 import java.util.Arrays; import java.util.List; public class ClosureEqualsMain { interface Strategy { void invoke(/*args*/); default boolean equals(Object o) { // doesn't compile return Closures.equals(this, o); } } public void a() { } public void b() { } public […]

PermGen和Metaspace有什么不同?

在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM用来保存类。 在Java 8中,它被移除并被称为Metaspace的区域所取代。 PermGen和Metaspace最重要的区别是什么? 唯一的区别是我知道java.lang.OutOfMemoryError: PermGen space不能再被抛出,并且VM参数MaxPermSize被忽略。

为什么Collections.sort使用Mergesort但Arrays.sort不?

我正在使用JDK-8(x64)。 对于Arrays.sort我在Java文档中find了以下内容: sortingalgorithm是由Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch提供的Dual-Pivot Quicksort 。 对于Collections.sort我发现这个: 这个实现是一个稳定的,自适应的,迭代的mergesort …这个实现把指定的列表转储到一个数组中,对数组进行sorting ,然后对列表进行迭代,以重置数组中相应位置的每个元素。 如果Collections.sort使用数组,为什么不调用Arrays.sort或使用双枢轴QuickSort ? 为什么使用Mergesort ?

将列表按元素拆分成子列表

我有这个列表( List<String> ): ["a", "b", null, "c", null, "d", "e"] 我想要这样的东西: [["a", "b"], ["c"], ["d", "e"]] 换句话说,我想要使用null值作为分隔符将列表拆分到子列表中,以获取列表( List<List<String>> )。 我正在寻找一个Java 8解决scheme。 我已经与Collectors.partitioningBy尝试,但我不知道这是我在找什么。 谢谢!

为什么在Java 8中转换types的reduce方法需要组合器?

我很难完全理解combiner在Streams中reduce方法的作用。 例如,下面的代码不会编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length()); 编译错误说:( 参数不匹配; int不能转换为java.lang.String) 但是这个代码编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(), (accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2); 我明白,合并器方法是并行stream – 所以在我的例子中,它是加在一起的两个中间积累的整数。 但我不明白为什么第一个例子不编译没有组合器或如何组合器是解决string转换为整数,因为它只是加在一起两个整数。 任何人都可以阐明这一点?

Java 8 – Optional.flatmap和Optional.map之间的区别

这两种方法有什么区别:Optional.flatMap()和Optional.map()? 一个例子,将不胜感激。

函数接口,不需要任何东西,并且什么都不返回

JDK中是否有一个标准的函数接口,它什么也不做,什么都不返回? 我找不到一个。 像下面这样: @FunctionalInterface interface Action { void execute(); }