标签: java-9

为什么要投资Jigsaw/JPMS?

Java的包管理系统对我来说似乎总是简单而有效.JDK本身大量使用它.我们一直在使用它来模仿名称空间和模块的概念.

什么是Project Jigsaw(又名Java平台模块系统)试图填写?

来自官方网站:

该项目的目标是为Java SE平台设计和实现标准模块系统,并将该系统应用于平台本身和JDK.

java java-platform-module-system java-9

78
推荐指数
4
解决办法
2万
查看次数

为什么\ R在Java 8和Java 9之间的正则表达式中表现不同?

以下代码在Java 8和9中编译,但行为不同.

class Simple {
    static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme";

    public static void main(String args[]){
        String[] chunks = sample.split("\\R\\R");
        for (String chunk: chunks) {
            System.out.println("Chunk : "+chunk);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用Java 8运行它时,它返回:

Chunk : 
En un lugar
de la Mancha
de cuyo nombre
no quiero acordarme
Run Code Online (Sandbox Code Playgroud)

但是当我使用Java 9运行它时,输出是不同的:

Chunk : 
En un lugar
Chunk : de la Mancha
de cuyo nombre
Chunk : no quiero acordarme
Run Code Online (Sandbox Code Playgroud)

为什么?

java regex unicode java-8 java-9

77
推荐指数
2
解决办法
3179
查看次数

takeWhile()与flatmap的工作方式不同

我正在创建片段与takeWhile探索其可能性.与flatMap结合使用时,行为与预期不符.请在下面找到代码段.

String[][] strArray = {{"Sample1", "Sample2"}, {"Sample3", "Sample4", "Sample5"}};

Arrays.stream(strArray)
        .flatMap(indStream -> Arrays.stream(indStream))
        .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4"))
        .forEach(ele -> System.out.println(ele));
Run Code Online (Sandbox Code Playgroud)

实际产量:

Sample1
Sample2
Sample3
Sample5
Run Code Online (Sandbox Code Playgroud)

ExpectedOutput:

Sample1
Sample2
Sample3
Run Code Online (Sandbox Code Playgroud)

期望的原因是takeWhile应该执行直到内部条件变为真.我还在flatmap中添加了printout语句以进行调试.流返回两次,符合预期.

但是,如果链中没有flatmap,这样可以正常工作.

String[] strArraySingle = {"Sample3", "Sample4", "Sample5"};
Arrays.stream(strArraySingle)
        .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4"))
        .forEach(ele -> System.out.println(ele));
Run Code Online (Sandbox Code Playgroud)

实际产量:

Sample3
Run Code Online (Sandbox Code Playgroud)

这里实际输出与预期输出匹配.

免责声明:这些代码段仅用于代码练习,不提供任何有效的用例.

更新: 错误JDK-8193856:修复将作为JDK 10的一部分提供.更改将更正whileOps Sink :: accept

@Override 
public void accept(T t) {
    if (take = predicate.test(t)) {
        downstream.accept(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

改变实施:

@Override
public void accept(T t) {
    if (take && …
Run Code Online (Sandbox Code Playgroud)

java lambda java-stream java-9

75
推荐指数
4
解决办法
3874
查看次数

Java 8与Java 9中的Stream.peek()方法

我正在学习Java 8 lambda表达式的过程,并且想问一下peek我遇到的与函数接口中的方法有关的以下Java代码.

在IDE上执行程序时,它不提供输出.我原以为它会给2, 4, 6.

import java.util.Arrays;
import java.util.List;

public class Test_Q3 {

    public Test_Q3() {
    }

    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3);
        values.stream()
              .map(n -> n * 2)
              .peek(System.out::print)
              .count();
    }
}
Run Code Online (Sandbox Code Playgroud)

java lambda peek java-8 java-9

67
推荐指数
2
解决办法
4860
查看次数

64
推荐指数
3
解决办法
5505
查看次数

Eclipse没有使用NoClassDefFoundError引起的JUnit 5测试

问题

每当我运行我的项目JUnit测试(使用JUnit 5与Java 9和Eclipse Oxygen 1.a)我遇到eclipse无法找到任何测试的问题.

说明

在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示" (所有方法) ".以下图片有望为我的设置提供更好的一瞥:

https://imgur.com/a/FTe9c

控制台输出:

java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base/java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    ... 11 more
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么

我已经试过了

  • 从构建路径中删除测试文件夹并再次添加.
  • 将鼠标悬停在使用@Test注释的方法上开始测试,然后单击"Run as JUnit Test".
  • 从Buildpath中删除JUnit并再次添加
  • 重启日食
  • 我还将项目整个项目从一台机器移动到另一台机器,并在那里使用提供的eclipse安装进行了尝试
  • 重命名测试方法.
  • 重新键入@Test注释

其中一些步骤可以在这里找到,但最终问题仍然存在.

java eclipse junit java-9 junit5

64
推荐指数
14
解决办法
7万
查看次数

Java 9编译器中的--release标志是什么?

Java 9 javac有一个新的标志--release:

> javac --help
...

--release <release>
    Compile for a specific VM version. Supported targets: 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)

-source-target旗帜有什么不同?它只是一个捷径-source X -target X吗?

java javac java-9

62
推荐指数
2
解决办法
8162
查看次数

RxJava API和Java 9 Flow API之间的区别

在最近几个主要版本的Java的每次迭代中,似乎都有新的方法来管理并发任务.

在Java 9中,我们有Flow API,类似于RxJava的Flowable API,但Java 9有一组更简单的类和接口.

Java 9

Flow.Publisher,Flow.Subscriber,Flow.Processor,Flow.Subscription,和SubmissionPublisher,这就是它.

RxJava

拥有全流API状类,即io.reactivex.flowables,io.reactivex.subscribers,io.reactivex.processors,io.reactivex.observers,和io.reactivex.observables这似乎做同样的事情.

这两个库之间的主要区别是什么?为什么有人会使用Java 9 Flow库而不是更多样化的RxJava库,反之亦然?

java rx-java java-9 rx-java2

62
推荐指数
4
解决办法
1万
查看次数

62
推荐指数
1
解决办法
2726
查看次数

为什么Map.of不允许空键和值?

在Java 9,新的工厂方法已经出台了List,SetMap接口.这些方法允许使用一行中的值快速实例化Map对象.现在,如果我们考虑:

Map<Integer, String> map1 = new HashMap<Integer, String>(Map.of(1, "value1", 2, "value2", 3, "value3"));
map1.put(4, null);
Run Code Online (Sandbox Code Playgroud)

如果我们这样做,上面是允许的,没有任何例外:

Map<Integer, String> map2 = Map.of(1, "value1", 2, "value2", 3, "value3", 4, null );
Run Code Online (Sandbox Code Playgroud)

它抛出:

Exception in thread "main" java.lang.NullPointerException
    at java.base/java.util.Objects.requireNonNull(Objects.java:221)
..
Run Code Online (Sandbox Code Playgroud)

我无法得到,为什么在第二种情况下不允许.

我知道HashMap可以将null作为键和值,但为什么在Map.of的情况下受限制?

同样的事情发生在的情况下java.util.Set.of("v1", "v2", null)java.util.List.of("v1", "v2", null).

java java-9

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