我是Java 8的新手.我仍然不深入了解API,但我已经做了一个小的非正式基准测试来比较新Streams API与优秀旧Collections的性能.
测试包括过滤一个列表Integer,并为每个偶数计算平方根并将其存储在结果List中Double.
这是代码:
public static void main(String[] args) {
//Calculating square root of even numbers from 1 to N
int min = 1;
int max = 1000000;
List<Integer> sourceList = new ArrayList<>();
for (int i = min; i < max; i++) {
sourceList.add(i);
}
List<Double> result = new LinkedList<>();
//Collections approach
long t0 = System.nanoTime();
long elapsed = 0;
for (Integer i : sourceList) {
if(i % 2 == 0){
result.add(Math.sqrt(i));
} …Run Code Online (Sandbox Code Playgroud) 我可以使用retrolambda来启用Android API级别<24的lambdas.这样可行
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
Run Code Online (Sandbox Code Playgroud)
这也有效
Runnable runLater = () -> Timber.d("Lambdas work!");
runLater.run();
Run Code Online (Sandbox Code Playgroud)
但是这个没有
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
Run Code Online (Sandbox Code Playgroud)
最后一个适用于Android API Level 24,但在其他设备上,此代码会导致崩溃
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
Run Code Online (Sandbox Code Playgroud)
我试图启用Java 8.而不是使用retrolambda.前两个代码示例仍然有效,尽管butterknife停止工作.https://developer.android.com/preview/j8-jack.html#configuration这里ava.util.function被认为是支持的,但在运行第三个时,我仍然得到一个崩溃,这一次却是有一点不同
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
Run Code Online (Sandbox Code Playgroud) 我在我的android项目中使用jack编译器.我的min sdk设置为18.我无法在代码中使用forEach和lambda.它要求我将我的min sdk更改为24或更高.我希望通过JACK编译器的集成,我可以轻松地将这个forEach与lambda一起使用.除了碰撞最小的sdk之外,还有其他工作吗?
听到Google的desugar项目令我感到非常兴奋,因为我必须提供支持minSdkVersion 17。
我继续尝试了一个简单的Java 8示例:
List<String> myList = Arrays.asList("element1","element2","element3");
myList.forEach(element -> System.out.println(element));
Run Code Online (Sandbox Code Playgroud)
但是,Android Studio说 Call requires API level 24 (current min is 17): java.lang.Iterable#forEach
Google 发布了有关支持哪些功能的表格。他们的文档中是否提及Iterable.forEach()任何minSdkVersion 是否受支持?
android ×3
java-8 ×3
foreach ×2
java ×2
lambda ×2
collections ×1
java-stream ×1
performance ×1
retrolambda ×1