标签: java-8

Intellij error = 2没有这样的文件或目录

安装intellij并添加sdk路径到项目结构,但当我尝试运行时我得到:

Error: Cannot run program "/home/$USER/java/jdk1.8.0_121/bin/java" 
(in directory"/home/$USER/.intelliJIdea2016.3/system/compile-server"):
error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

两个文件(/home/$USER/java/jdk1.8.0_121/bin/java和/home/$USER/.intelliJIdea2016.3/system/compile-server)都存在.

我正在使用Ubuntu 16.10

java intellij-idea java-8

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

为什么没有提供Stream <E>的接口?

为了防止实现细节泄漏,而不是返回,例如,Collection<MyCoolObject>可以实现Iterable<MyCoolObject>,然后需要Iterator<T>Iterable接口实现.因此,无论如何管理内部数据结构,对元素的访问都是通过Iterator.

使用Java 8,可能希望添加Stream<MyCoolObject> stream()MyCoolObject.(另请参阅:Java 8 Lambdasstream一书中支持的建议).虽然添加方法并不困难(我确实阅读了关于为什么Iterable不提供流的问题),但Java似乎没有添加一个接口来反映这个想法.(好吧,可能因为使用CORBA的东西而存在一个不同的名称).Streamable<T>Iterable<T>Streamable

我想,我也跟着为什么加入应答StreamIterable了可能存在问题,但我不明白为什么一个Streaming<T>已经不能提供的接口.例如,Collections可以实现Streaming<T>接口,并且可以使人们可以期待stream()方法的其他对象更清楚.

基于对上述引用问题的答案,可以StreamIterable通过获得

Stream s = StreamSupport.stream(iter.spliterator(), false);
Run Code Online (Sandbox Code Playgroud)

但这看起来似乎很多工作,MyObject可能只想实现stream()允许对象的用户这样做

myObject.stream().filter(...).collect(...)
Run Code Online (Sandbox Code Playgroud)

没有来自迭代器的干预转换.

缺少流媒体功能对象的接口是否有原因?有没有比仅仅stream()在MyCoolObject上实现并让某人查看Javadoc以便他们知道它有stream()方法更好的方法?

或者,很可能,我是否误解了Stream的方法?

(另外,我stream()在CoolObject中实现,但后来忘记实现parallelStream(),这可以通过使用接口来缓解).

java java-8 java-stream

16
推荐指数
1
解决办法
596
查看次数

在java 8中从并行流中收集

我想获取输入并在其上应用并行流,然后我想输出为列表.输入可以是我们可以应用流的任何列表或任何集合.

我担心的是,如果我们想要输出作为映射它们,我们有一个来自java的选项就像

list.parallelStream().collect(Collectors.toConcurrentMap(args))
Run Code Online (Sandbox Code Playgroud)

但是我没有选择以线程安全的方式从并行流中收集以提供列表作为输出.我看到另外一个选项可供使用

list.parallelStream().collect(Collectors.toCollection(<Concurrent Implementation>))

通过这种方式,我们可以在collect方法中提供各种并发实现.但我认为java.util.concurrent中只存在CopyOnWriteArrayList List实现.我们可以在这里使用各种队列实现,但那些不会像列表一样.我的意思是我们可以解决这个问题.

如果我想要输出列表,你能指导一下最好的方法吗?

注意:我找不到与此相关的任何其他帖子,任何参考都会有所帮助.

java java.util.concurrent java-8 java-stream

16
推荐指数
2
解决办法
9636
查看次数

java 8将两个int数组的所有值相加

int[] ar1 = {1,2,3};
int[] ar2 = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

输出:

{2,3,4,3,4,5,4,5,6}
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

IntStream.range(0,ar1.length).map(x -> IntStream.range(0,ar2.length).map(y -> ar1[y]+ar2[x]));
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

类型不匹配:无法转换IntStreamint.

如何使用流将Java 8中的每个值ar1与每个值相加ar2

java java-8 java-stream

16
推荐指数
3
解决办法
2872
查看次数

无法在一个流中进行filter-> forEach-> collect?

我希望实现这样的目标:

items.stream()
    .filter(s-> s.contains("B"))
    .forEach(s-> s.setState("ok"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

过滤,然后从过滤结果中更改属性,然后将结果收集到列表中.但是,调试器说:

无法collect(Collectors.toList())在原始类型上调用void.

我需要2个流吗?

java lambda java-8 java-stream

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

Eclipse/javac不同意使用默认方法碰撞编译签名; 谁对吗?

这是一个演示该问题的简单类:

package com.mimvista.debug;

public class DefaultCollisionTest {
    public static interface Interface1 {
        public String getName();
    }

    public static interface Interface2 {
        public default String getName() { return "Mr. 2"; };
    }

    public static <X extends Interface1&Interface2> String extractName(X target) {
        return target.getName();
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse(Neon 2)愉快地编译这个类,而javac(JDK 1.8.0_121)吐出以下编译错误:

$ javac src/com/mimvista/debug/DefaultCollisionTest.java
src\com\mimvista\debug\DefaultCollisionTest.java:13: error: class INT#1 inherits abstract and default for getName() from types Interface2 and Interface1
        public static <X extends Interface1&Interface2> String extractName(X target) {
                       ^
  where INT#1 is an intersection …
Run Code Online (Sandbox Code Playgroud)

java eclipse generics javac java-8

16
推荐指数
2
解决办法
645
查看次数

哪些操作保留了订单

TL; DR; 我正在寻找一个可以查找某个中间操作或终端操作的地方.我在哪里可以找到这样的文件?

编辑这与如何确保java8流中的处理顺序不重复,因为该问题没有提供全面的操作清单.

背景

软件包的文件说:

流是否具有遭遇顺序取决于源和中间操作

这个优秀的stackoverflow答案中重复了这一点

为了确保整个流操作中的订购维护,您必须研究流的源,所有中间操作和终端操作的文档,以确定它们是否维护订单(或者源是否在第一个订单中有订单)地点).

这一切都很好,但我应该查看哪些文档?该软件包文件提到了这样的例子map,保证订货,但它没有一个详尽的清单.Stream类javadoc记录了一些中间操作,但不是全部.举个例子map:

返回一个流,该流包含将给定函数应用于此流的元素的结果.

这是一个中间操作.

要么 filter

返回由与此给定谓词匹配的此流的元素组成的流.

这是一个中间操作.

这些都没有描述它们是否保留了排序.

此stackoverflow回答声称:

实际上,每个中间操作都默认保留订单.唯一的例外是:

  • unordered(),它删除了排序约束.
  • sorted()改变了顺序.

如果没有明确指定,您可以假设操作保持订单.即使distinct()保持顺序,但它为并行流增加了很多复杂性.

但是有任何官方文件可以支持吗?

额外的功劳

实际上有两个单独的排序问题.

  1. 操作的输出是否与输入保持相同的顺序?
  2. 是否按顺序对每个元素执行操作.

例如,并行map操作可以以任意顺序遍历所有元素(违反2.),但仍然保持返回流中的顺序(服从1.)

java java-8 java-stream

16
推荐指数
1
解决办法
6854
查看次数

如何从流api的列表中获取随机元素?

使用Java8流API从列表中获取随机元素的最有效方法是什么?

Arrays.asList(new Obj1(), new Obj2(), new Obj3());
Run Code Online (Sandbox Code Playgroud)

谢谢.

java java-8

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

JDK dateformater在德语语言环境中解析DayOfWeek,java8 vs java9

我在Java 8(1.8.0_77)和Java 9(Java HotSpot(TM)64位服务器VM(构建9 + 181,混合模式)中尝试了一些代码)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
DayOfWeek mo = dtf.parse("Mo", DayOfWeek::from);
System.out.println("mo = " + mo);
Run Code Online (Sandbox Code Playgroud)

我不太熟悉这些类的细节,但在Java 8中这个工作,打印:

mo =星期一

在Java 9中,它失败了

线程"main"中的异常java.time.format.DateTimeParseException:无法在java.base上的java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)的索引0处解析文本"Mo"在day.main(day.java:10)的/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)

任何想法,这是可重现的吗?

因此,在格式化时:使用此代码:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
String format = dtf.format(DayOfWeek.MONDAY);
System.out.println("format = " + format);
Run Code Online (Sandbox Code Playgroud)

jdk1.8.0-77:

格式= Mo.

jdk-9(build 9 + 181)

格式= Mo.

java java-8 java-time java-9

16
推荐指数
2
解决办法
639
查看次数

在REST Assured中,如何设置超时?

我正在使用RestAssured 2.8.0并且我正在尝试设置自己的超时(对于网关超时),所以如果我在X毫秒后没有得到响应我想要中止.

我试过了:

public static ValidatableResponse postWithConnectionConfig(String url, String body, RequestSpecification requestSpecification, ResponseSpecification responseSpecification) {
    ConnectionConfig.CloseIdleConnectionConfig closeIdleConnectionConfig = new ConnectionConfig.CloseIdleConnectionConfig(1L, TimeUnit.MILLISECONDS);
    ConnectionConfig connectionConfig = new ConnectionConfig(closeIdleConnectionConfig);
    RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);


    return given().specification(requestSpecification)
            .body(body)
            .config(restAssuredConfig)
            .post(url)
            .then()
            .specification(responseSpecification);

}
Run Code Online (Sandbox Code Playgroud)

要么

ConnectionConfig connectionConfig = new ConnectionConfig()
            .closeIdleConnectionsAfterEachResponseAfter(10L, TimeUnit.MILLISECONDS);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);
Run Code Online (Sandbox Code Playgroud)

我也尝试添加

.queryParam("SO_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)

要么

.queryParam("CONNECTION_MANAGER_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)

似乎没什么用.它不会中止我的查询

httpclient java-8 rest-assured

16
推荐指数
3
解决办法
8137
查看次数