Tag: java 8

为什么在静态初始化器中使用lambda进行并行stream导致死锁?

我遇到了一个奇怪的情况,在静态初始化器中使用带有lambda的并行stream看似永远没有CPU利用率。 代码如下: class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -> i).count(); System.out.println("done"); } public static void main(final String[] args) {} } 这似乎是这种行为的最小再现testing案例。 如果我: 把该块放在主要的方法而不是一个静态初始化器, 删除并行,或 删除lambda, 代码即刻完成。 任何人都可以解释此行为? 这是一个错误还是这是打算? 我正在使用OpenJDK版本1.8.0_66内部。

java 8 ZonedDateTime和OffsetDateTime有什么区别?

我已经阅读了文档,但是我仍然无法使用其中的一种: OffsetDateTime ZonedDateTime 根据文档OffsetDateTime应该用于写入数据库的date,但我不明白为什么。

– > < – 操作符是做什么的?

我最近遇到以下代码: IntPredicate neg = x -> x <- x; 这是什么,某种反双拉姆达?

Java 8的forEach与索引

有没有办法在Java 8中build立一个迭代索引的forEach方法? 理想情况下,我想这样的事情: params.forEach((idx, e) -> query.bind(idx, e)); 我现在能做的最好的是: int idx = 0; params.forEach(e -> { query.bind(idx, e); idx++; });

Java 8 Streams FlatMap方法示例

我一直在检查即将到来的Java update ,即: Java 8 or JDK 8 。 是的,我很不耐烦,有很多新的东西,但是,有一些我不明白,一些简单的代码: final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10); stream.flatMap(); javadocs是 public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper) 返回一个stream,该stream包含将此stream的每个元素replace为通过将所提供的映射函数应用于每个元素而生成的映射stream的内容的结果。 每个映射stream在其内容放入此stream之后都会closures。 (如果映射stream为空,则使用空stream。)这是一个中间操作。 如果有人为flatMap创build了一些简单的现实生活中的例子,如何在之前的java版本中编写Java[6,7]以及如何使用Java 8编写相同的例程,我将不胜感激。

Java 8 Streams – 收集vs减less

你什么时候使用collect() vs reduce() ? 有没有人有一个很好的具体的例子,什么时候最好走一条路? Javadoc提到collect()是一个可变的减less 。 鉴于这是一个可变的减less,我认为它需要同步(内部),这反过来可能是有害的performance。 大概reduce()是更容易并行化的代价是必须创build一个新的数据结构,以减less每一步之后的返回。 以上的陈述是猜测,但我很乐意专家在这里钟声。

Java 8:我如何使用stream中的exception抛出方法?

假设我有一个类和一个方法 class A { void foo() throws Exception() { … } } 现在我想为每个由stream传递的A实例调用foo,如下所示: void bar() throws Exception { Stream<A> as = … as.forEach(a -> a.foo()); } 问题:如何正确处理exception? 该代码不会在我的机器上编译,因为我没有处理可能由foo()引发的exception。 throws Exception bar在这里似乎没用。 这是为什么?

Java 8中exceptiontypes推断的一个特殊function

当在这个网站上编写另一个答案的代码时,我遇到了这个特点: static void testSneaky() { final Exception e = new Exception(); sneakyThrow(e); //no problems here nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception } @SuppressWarnings("unchecked") static <T extends Throwable> void sneakyThrow(Throwable t) throws T { throw (T) t; } static <T extends Throwable> void nonSneakyThrow(T t) throws T { throw t; } 首先,我很困惑为什么sneakyThrow调用对编译器是可以的。 当没有提及任何未经检查的exceptiontypes时,它推断T是什么types的? 其次,接受这个工作,为什么编译器会抱怨nonSneakyThrow调用呢? 他们看起来非常相似。

为什么StringBuilder#在Java 7中追加(int)比在Java 8中更快?

虽然使用"" + n和Integer.toString(int)将一个整数原语转换为一个string调查了一点争论,我写了这个JMH微基准: @Fork(1) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class IntStr { protected int counter; @GenerateMicroBenchmark public String integerToString() { return Integer.toString(this.counter++); } @GenerateMicroBenchmark public String stringBuilder0() { return new StringBuilder().append(this.counter++).toString(); } @GenerateMicroBenchmark public String stringBuilder1() { return new StringBuilder().append("").append(this.counter++).toString(); } @GenerateMicroBenchmark public String stringBuilder2() { return new StringBuilder().append("").append(Integer.toString(this.counter++)).toString(); } @GenerateMicroBenchmark public String stringFormat() { return String.format("%d", […]

Java 8是否提供重复值或函数的好方法?

在许多其他语言中,例如。 Haskell,很容易重复一个值或函数多次,例如。 得到8份价值清单1: take 8 (repeat 1) 但是我还没有在Java 8中find这个。Java 8的JDK中有这样一个函数吗? 或者也可以是相当于一个范围的东西 [1..8] 这似乎是Java中的一个冗长的陈述的明显替代 for (int i = 1; i <= 8; i++) { System.out.println(i); } 有类似的东西 Range.from(1, 8).forEach(i -> System.out.println(i)) 虽然这个特殊的例子看起来并不简单,但希望它更具可读性。