我正在使用OpenJDK 1.8编写Maven应用程序并使用TestNG运行测试.
当我从命令行运行Maven时一切正常,但是当我尝试在IntelliJ中运行测试时,make进程显示以下错误:
java: javacTask: source release 8 requires target release 1.8
Run Code Online (Sandbox Code Playgroud)
我的项目设置指向1.8 JDK和Project Language Level 8.
在Maven内部我有以下块(我猜测它还没有被调用,因为它似乎是造成问题的原因)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我甚至将Maven Runner JRE配置为指向1.8 JDK.
我似乎无法让IntelliJ 12.0.4正确运行测试
我错过了什么吗?
看看下面的课程我做了:
public class FibonacciSupplier implements Iterator<Integer> {
private final IntPredicate hasNextPredicate;
private int beforePrevious = 0;
private int previous = 1;
private FibonacciSupplier(final IntPredicate hasNextPredicate) {
this.hasNextPredicate = hasNextPredicate;
}
@Override
public boolean hasNext() {
return hasNextPredicate.test(previous);
}
@Override
public Integer next() {
int result = beforePrevious + previous;
beforePrevious = previous;
previous = result;
return result;
}
public static FibonacciSupplier infinite() {
return new FibonacciSupplier(i -> true);
}
public static FibonacciSupplier finite(final IntPredicate predicate) {
return new FibonacciSupplier(predicate);
} …Run Code Online (Sandbox Code Playgroud) 我是一个ETL进程,我从Spring Data Repository中检索了很多实体.然后我使用并行流将实体映射到不同的实体.我可以使用使用者将这些新实体逐个存储在另一个存储库中,或者将它们收集到List中并将其存储在单个批量操作中.第一种是昂贵的,而后者可能超过可用的内存.
有没有一种很好的方法来收集流中的一定数量的元素(如限制),消耗该块,并继续并行处理直到所有元素都被处理?
免责声明:这不是关于这种情况(虽然错误听起来一样):class从类型java.util.Set和java.util.List继承spliterator()的无关默认值
这就是为什么:
考虑两个接口(在包" a"中)
interface I1 {
default void x() {}
}
interface I2 {
default void x() {}
}
Run Code Online (Sandbox Code Playgroud)
我绝对清楚为什么我们不能宣布这样的类:
abstract class Bad12 implements I1, I2 {
}
Run Code Online (Sandbox Code Playgroud)
(!)但我无法理解这种限制,参考类型变量:
class A<T extends I1&I2> {
List<T> makeList() {
return new ArrayList<>();
}
}
Run Code Online (Sandbox Code Playgroud)
有错误:class java.lang.Object&a.I1&a.I2 inherits unrelated defaults for x() from types a.I1 and a.I2.
为什么我不能定义这样的类型变量?java在这种情况下,为什么要关心不相关的默认值?什么类型的变量可以"打破"?
更新:只是为了澄清.我可以创建几个类的表单:
class A1 implements I1, I2 {
public void x() { …Run Code Online (Sandbox Code Playgroud) 在Java的API 8说:
在执行管道的终端操作之前,不会开始遍历管道源.
那么为什么以下代码抛出:
java.lang.IllegalStateException:stream已经被操作或关闭
Stream<Integer> stream = Stream.of(1,2,3);
stream.filter( x-> x>1 );
stream.filter( x-> x>2 ).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
根据API的第一个过滤操作不应该在Stream上操作.
我已经使用lambda表达式对集合实现了排序以进行比较.我必须检查空值,所以我想出了比较器的这个解决方案
(a,b)->(
(a.getStartDate() == null)
? ( (b.getStartDate() == null) ? 0 : -1)
: ( (b.getStartDate() == null)?1:a.getStartDate().compareTo(b.getStartDate()) )
);
Run Code Online (Sandbox Code Playgroud)
我已经检查了一些问题,比如这个,但它们都是指lambda前代码.
java lambda表达式让我有机会避免两个'if'语句吗?我能以更干净的方式执行任务吗?
Scala foldLeft在Java 8中的优势是什么?
我很想想它reduce,但是减少必须返回与它减少的相同类型的东西.
例:
import java.util.List;
public class Foo {
// this method works pretty well
public int sum(List<Integer> numbers) {
return numbers.stream()
.reduce(0, (acc, n) -> (acc + n));
}
// this method makes the file not compile
public String concatenate(List<Character> chars) {
return chars.stream()
.reduce(new StringBuilder(""), (acc, c) -> acc.append(c)).toString();
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码中的问题是accumulator:new StringBuilder("")
因此,任何人都可以指出我正确的foldLeft/修复我的代码?
我想创建一个Map从List的PointS和有地图从里面用相同的parentId,如映射列表中的所有条目Map<Long, List<Point>>.
我用过Collectors.toMap()但不编译:
Map<Long, List<Point>> pointByParentId = chargePoints.stream()
.collect(Collectors.toMap(Point::getParentId, c -> c));
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
StringBuilder str = new StringBuilder("foo");
for(Field f : fields){
str.append("|" + f);
}
str.append("|" + bar);
String result = str.toString();
Run Code Online (Sandbox Code Playgroud)
我知道编译器会优化字符串连接"|" + f并用StringBuilder替换它.但是,是否会创建一个新的StringBuilder,或者现有的str将在Java 8中使用?Java 9怎么样?
我们刚刚在Amazon Linux上升级到Java 8.我们正在使用Spring 4.3.8.RELEASE.过去我们可以通过在应用程序上下文文件中设置bean来获取我们的机器主机名,就像这样...
<bean id="localhostInetAddress" class="java.net.InetAddress" factory-method="getLocalHost" />
<bean id="hostname" factory-bean="localhostInetAddress" factory-method="getHostName" />
Run Code Online (Sandbox Code Playgroud)
但是对于Java 8,bean"hostname"现在包含字符串
localhost
Run Code Online (Sandbox Code Playgroud)
在Java 8之前,它曾用于包含在命令行上运行的"hostname"值,即
[myuser@machine1 ~]$ hostname
machine1.mydomain.org
Run Code Online (Sandbox Code Playgroud)
如何重新配置我们的bean,以便它获取命令行列出的主机名?我不想在任何地方硬编码.
java-8 ×10
java ×7
java-stream ×3
collectors ×1
foldleft ×1
hostname ×1
iterator ×1
java-9 ×1
lambda ×1
linux ×1
performance ×1
reduce ×1
spring ×1