相关疑难解决方法(0)

Java 8:Streams vs Collections的性能

我是Java 8的新手.我仍然不深入了解API,但我已经做了一个小的非正式基准测试来比较新Streams API与优秀旧Collections的性能.

测试包括过滤一个列表Integer,并为每个偶数计算平方根并将其存储在结果ListDouble.

这是代码:

    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)

java collections performance java-8 java-stream

126
推荐指数
4
解决办法
7万
查看次数

有没有办法在24以下的Android API上使用Java 8功能接口?

我可以使用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)

java lambda android functional-interface retrolambda

21
推荐指数
2
解决办法
6780
查看次数

无法在android min sdk版本中使用forEach和lambda小于24

我在我的android项目中使用jack编译器.我的min sdk设置为18.我无法在代码中使用forEach和lambda.它要求我将我的min sdk更改为24或更高.我希望通过JACK编译器的集成,我可以轻松地将这个forEach与lambda一起使用.除了碰撞最小的sdk之外,还有其他工作吗?

foreach lambda android java-8

9
推荐指数
0
解决办法
931
查看次数

Android是否使用minSdkVersion &lt;24来对Java 8 Iterable.forEach()进行糖化?

听到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 是否受支持?

foreach android java-8

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