标签: java-8

获取枚举值作为Java 8中的String列表

是否有任何Java 8方法或简单方法,它将Enum值作为String列表返回,如:

List<String> sEnum = getEnumValuesAsString();
Run Code Online (Sandbox Code Playgroud)

java enums java-8

45
推荐指数
2
解决办法
7万
查看次数

如何在Java 11中使用没有jre的jdk

我们计划将Java 8项目迁移到使用Java 11.但是我注意到Java 11没有JRE文件夹.

在Java 9和Java 10中,文件夹结构被更改,即,java\jdk1.x或者java\jre1.xxjava 9或10中.

但是在Java 11中,我只获得了一个文件夹,即java\jdk-11.如果没有jre,我的客户如何使用我的应用程序?

我所理解的是Java 11正在强制模块化我们的应用程序,并且需要使用jlink来创建我们自己的jre以在客户端中运行应用程序.

我的理解是否正确?

java migration java-8 java-11

45
推荐指数
3
解决办法
3万
查看次数

在Java 8中使用两个具有相同签名的默认方法实现两个接口

假设我有两个接口:

public interface I1
{
    default String getGreeting() {
        return "Good Morning!";
    }
}

public interface I2
{
    default String getGreeting() {
        return "Good Afternoon!";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想实现它们,将使用什么实现?

public class C1 implements I1, I2
{
    public static void main(String[] args)
    {
        System.out.println(new C1().getGreeting());
    }
}
Run Code Online (Sandbox Code Playgroud)

java interface java-8

44
推荐指数
3
解决办法
1万
查看次数

可选与null.Java 8中Optional的目的是什么?

在Java 8中,您可以返回Optional而不是a null.Java 8文档说可选是"容器对象,可能包含也可能不包含非空值.如果存在值,isPresent()将返回true,get()将返回值."

在实践中,为什么这有用?此外,是否有任何null优先使用的情况?性能怎么样?

java java-8

44
推荐指数
3
解决办法
3万
查看次数

Java 8数组构造函数引用如何工作?

假设我们有一个IntFunction返回整数数组的变量:

IntFunction<int[]> i;
Run Code Online (Sandbox Code Playgroud)

使用Java 8泛型,可以使用如下构造函数引用初始化此变量:

i = int[]::new
Run Code Online (Sandbox Code Playgroud)

Java编译器如何将其转换为字节码?

我知道对于其他类型,例如String::new,它可以使用invokedynamic指向String构造函数的指令java/lang/String.<init>(...),这只是一个具有特殊含义的方法.

这对数组有什么用处,看到有构造数组的特殊指令?

java arrays java-8 method-reference

44
推荐指数
1
解决办法
4574
查看次数

在Java 8中反转比较器

我有一个ArrayList,并希望按降序排序.我用它来做法java.util.stream.Stream.sorted(Comparator).这是根据Java API的描述:

返回由此流的元素组成的流,并根据提供的内容进行排序Comparator.

这个方法给我一个升序排序.我应该更改哪个参数,只是为了降序?

java sorting comparator java-8 java-stream

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

Java 8 Stream API用于查找与属性值匹配的唯一对象

使用Java 8 Stream从Collection中查找与Property值匹配的对象.

List<Person> objects = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

人员属性 - >姓名,电话,电子邮件.

迭代人员列表并找到匹配电子邮件的对象.看到这可以通过Java 8流轻松完成.但那还会收回一个系列吗?

例如:

List<Person> matchingObjects = objects.stream.
    filter(p -> p.email().equals("testemail")).
    collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但我知道它总会有一个独特的对象.我们可以做一些事情,而不是Collectors.toList直接得到实际的对象.而不是获取对象列表.

java filter java-8 java-stream

44
推荐指数
3
解决办法
8万
查看次数

带有Collection或List的Java 8 CompletableFuture.allOf(...)

Java 8有一个函数CompletableFuture.allOf(CompletableFuture<?>...cfs),它返回一个CompletableFuture在所有给定的期货完成时完成的函数.

但是,我几乎总是不处理一个CompletableFutures 数组,而是有一个List<CompletableFuture>.当然,我可以使用这种toArray()方法,但是这必须经常在数组和列表之间来回转换,这有点痛苦.

如果有一个光滑的方式来CompletableFuture<List<T>>换取a List<CompletableFuture<T>>,而不是经常不得不投入中间数组创建,那将是非常好的.有没有人知道在Java 8中这样做的方法?

java java-8 completable-future

44
推荐指数
1
解决办法
5万
查看次数

使用方法引用而不是lambda表达式抛出java.lang.NullPointerException

我注意到使用Java 8方法引用的未处理异常有些奇怪.这是我的代码,使用lambda表达式() -> s.toLowerCase():

public class Test {

    public static void main(String[] args) {
        testNPE(null);
    }

    private static void testNPE(String s) {
        Thread t = new Thread(() -> s.toLowerCase());
//        Thread t = new Thread(s::toLowerCase);
        t.setUncaughtExceptionHandler((t1, e) -> System.out.println("Exception!"));
        t.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印"Exception",所以它工作正常.但是当我Thread t改为使用方法引用时(甚至IntelliJ建议):

Thread t = new Thread(s::toLowerCase);
Run Code Online (Sandbox Code Playgroud)

异常没有被捕获:

Exception in thread "main" java.lang.NullPointerException
    at Test.testNPE(Test.java:9)
    at Test.main(Test.java:4)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Run Code Online (Sandbox Code Playgroud)

有人能解释一下这里发生了什么吗?

java lambda nullpointerexception java-8 method-reference

44
推荐指数
2
解决办法
3597
查看次数

为什么Arrays.asList(...).toArray().getClass()在JDK 8和9中给出不同的结果?

为什么以下条件返回trueJDK 8,而它返回falseJDK 9?

String[].class == Arrays.asList("a", "b").toArray().getClass()
Run Code Online (Sandbox Code Playgroud)

java java-8 java-9

44
推荐指数
2
解决办法
1434
查看次数