标签: java-8

Java 8中的::(双冒号)运算符

我正在探索Java 8源代码,发现代码的这一特定部分非常令人惊讶:

//defined in IntPipeline.java
@Override
public final OptionalInt reduce(IntBinaryOperator op) {
    return evaluate(ReduceOps.makeInt(op));
}

@Override
public final OptionalInt max() {
    return reduce(Math::max); //this is the gotcha line
}

//defined in Math.java
public static int max(int a, int b) {
    return (a >= b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

Math::max什么样的方法指针?普通static方法如何转换为IntBinaryOperator

java java-8

912
推荐指数
8
解决办法
31万
查看次数

Java 8将<V>列入Map <K,V>

我想使用Java 8的流和lambdas将对象列表转换为Map.

这就是我在Java 7及以下版本中编写它的方法.

private Map<String, Choice> nameMap(List<Choice> choices) {
        final Map<String, Choice> hashMap = new HashMap<>();
        for (final Choice choice : choices) {
            hashMap.put(choice.getName(), choice);
        }
        return hashMap;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用Java 8和Guava轻松完成此任务,但我想知道如何在没有Guava的情况下完成此操作.

在番石榴:

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

还有Java 8 lambda的番石榴.

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

892
推荐指数
16
解决办法
60万
查看次数

如何在Mac上安装Java 8

我想用最新的JavaFX进行一些编程,这需要Java 8.我使用的是IntelliJ 13 CE和Mac OS X 9 Mavericks.我运行了Oracle的Java 8安装程序,文件看起来就像是他们最终的结果

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk
Run Code Online (Sandbox Code Playgroud)

但以前的版本是

/System/Library/Java/JavaFrameworks/jdk1.6....
Run Code Online (Sandbox Code Playgroud)

不知道为什么最新的安装程序将其放入/Library而不是/System/Library(也没有区别).但是/usr/libexec/java_home找不到1.8,所以我发现的关于如何设置当前java版本的所有帖子都不起作用.我已经尝试添加一个符号链接,使其看起来像1.8在/System/Library...路径中,但它没有帮助./usr/libexec/java_home -V仍然只列出旧的Java 1.6.

具有讽刺意味的是,"系统偏好设置"下的"Java"控制面板仅显示Java 1.8!

为什么Oracle的安装程序没有把它放到真正的位置?我该如何解决这个问题?

java macos java-8

847
推荐指数
27
解决办法
65万
查看次数

错误:java:javacTask:源版本8需要目标版本1.8

使用IntelliJ IDE无法编译任何项目.以下设置的屏幕截图:

使用JDK:

http://gyazo.com/b6e32119af7b04090d890cad04db6373

项目SDK和语言级别:

http://gyazo.com/55a5fc9f7f2bb721a04780ce9d74eeab

语言水平:

http://gyazo.com/143bffad63fd89cafc231298729df2fc

有人有什么想法吗?

java intellij-idea java-8

826
推荐指数
10
解决办法
38万
查看次数

为什么数组[idx ++] + ="a"在Java 8中增加一次idx,在Java 9和10中增加两次?

对于挑战,一位代码高尔夫球手 编写了以下代码:

import java.util.*;
public class Main {
  public static void main(String[] args) {
    int size = 3;
    String[] array = new String[size];
    Arrays.fill(array, "");
    for(int i = 0; i <= 100; ) {
      array[i++%size] += i + " ";
    }
    for(String element: array) {
      System.out.println(element);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Java 8中运行此代码时,我们得到以下结果:

1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 …
Run Code Online (Sandbox Code Playgroud)

java javac java-8 java-9 java-10

730
推荐指数
1
解决办法
7万
查看次数

如何将Java 8流转换为数组?

将Java 8 Stream转换为数组的最简单/最简单的方法是什么?

java arrays java-8 java-stream

728
推荐指数
6
解决办法
35万
查看次数

632
推荐指数
16
解决办法
31万
查看次数

是否可以使用Java 8进行Android开发?

在网上搜索,目前尚不清楚Java 8是否支持Android开发.

在我下载/设置Java 8之前,有人可以在任何"官方"文档中指出我说Java 8是否支持Android开发.

java android java-8 android-gradle-plugin

594
推荐指数
12
解决办法
27万
查看次数

与Java 8中的默认方法和抽象类的接口

由于Java 8允许在名为Default Methods的接口中默认实现方法,因此在何时使用a之间似乎存在混淆abstract class.

那么什么时候应该使用与默认方法的接口,何时应该使用抽象类?抽象类在这种情况下仍然有用吗?

java abstract-class interface java-8 default-method

489
推荐指数
10
解决办法
10万
查看次数

按谓词查找第一个元素

我刚刚开始使用Java 8 lambdas,我正在尝试实现我在函数式语言中习惯的一些东西.

例如,大多数函数式语言都有某种类型的查找函数,这些函数对序列进行操作,或者列表返回谓词所在的第一个元素true.我在Java 8中实现这一目标的唯一方法是:

lst.stream()
    .filter(x -> x > 5)
    .findFirst()
Run Code Online (Sandbox Code Playgroud)

然而这对我来说似乎效率低下,因为过滤器会扫描整个列表,至少根据我的理解(这可能是错误的).有没有更好的办法?

java java-8 java-stream

478
推荐指数
5
解决办法
36万
查看次数