Tag: java 8

在Java 8中是否有相当于Scala的呢?

就像Java 8 java.util.Optional<T>有点类似于Scala的Option[T]types,是否有相当于Scala的Either[L, R] ?

什么时候应该比传统循环更优先selectstream? stream是利用分支预测吗?

我刚刚阅读了关于分支预测的内容 ,想试试Java 8 Streams如何工作。 然而Streams的performance总是比传统的循环更糟糕。 int totalSize = 32768; int filterValue = 1280; int[] array = new int[totalSize]; Random rnd = new Random(0); int loopCount = 10000; for (int i = 0; i < totalSize; i++) { // array[i] = rnd.nextInt() % 2560; // Unsorted Data array[i] = i; // Sorted Data } long start […]

升级到Java8后,javac仍然显示1.7

我在OSX上从JDK 1.7 – > 1.8升级有问题。 升级已经完成,但javac仍然返回1.7版本。 我从Oracle的主页下载了JDK 8_u5 ,然后运行安装程序。 我也采取了以下步骤,安装后: > export JAVA_HOME=`/usr/libexec/java_home -v 1.8` (Executed in my .bashrc file) > echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home > javac -version javac 1.7.0_21 > $JAVA_HOME/bin/javac -version javac 1.7.0_21 > $JAVA_HOME/bin/java -version java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode) […]

在mac os sierra更新之后,像Intellij这样的Java应用程序面临滚动问题

在最近的更新之后,Mac os Sierra对我的Macbook Pro来说,我正面临像Intellij IDEA社区版这样的所有Java应用程序的滚动问题。 编辑器窗格中的滚动速度非常快。 滚动增量的单位似乎很大。 Intellij IDEA版本是2016.2.3。 Java版本是Java 8 Update 10.1。 即使在“系统首选项” – >“Java” – >“高级”选项卡中,我也会看到相同的行为。

Java8:lambdaexpression式和重载方法的歧义

我正在玩java8 lambda,我遇到了一个我没有想到的编译器错误。 假设我有一个函数interface A ,一个abstract class B和一个class C带有以A或B为参数的重载方法: public interface A { void invoke(String arg); } public abstract class B { public abstract void invoke(String arg); } public class C { public void apply(A x) { } public B apply(B x) { return x; } } 然后我可以传入一个lambda到c.apply ,并正确parsing为c.apply(A) 。 C c = new C(); c.apply(x […]

Java8的Lambda和例外

我想知道是否有人可以向我解释下面这个怪事。 我正在使用Java 8更新11。 给定这种方法 private <F,T> T runFun(Function<Optional<F>, T> fun, Optional<F> opt) { return fun.apply(opt) ; } 如果我首先构造一个函数Object,并将其传入上面的方法,则编译。 private void doesCompile() { Function<Optional<String>, String> fun = o -> o.orElseThrow(() -> new RuntimeException("nah")); runFun(fun, Optional.of("foo")); } 但是,如果我把这个函数作为一个lambda函数进行内联,编译器说 未报告的exceptionX; 必须被逮捕或宣布被抛出 private void doesNotCompile () { runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), Optional.of("foo")); } 更新 :原来的错误消息被maven缩写。 如果直接用javac编译,错误是: error: […]

newInstance与新的jdk-9 / jdk-8和jmh

我在这里看到很multithreading比较并试图回答哪个更快: newInstance或new operator 。 看源代码,似乎newInstance应该慢得多 ,我的意思是它做了这么多的安全检查并使用reflection。 我决定先测量一下,首先运行jdk-8。 这里是使用jmh的代码。 @BenchmarkMode(value = { Mode.AverageTime, Mode.SingleShotTime }) @Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) @State(Scope.Benchmark) public class TestNewObject { public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder().include(TestNewObject.class.getSimpleName()).build(); new Runner(opt).run(); } @Fork(1) @Benchmark […]

java.time中是否有类可比Joda时间间隔的类?

我正在评估将我的项目从Joda-Time的使用迁移到Java 8中的java.time包 。 在Joda-Time,我大量使用了Interval类。 我在java.time中找不到像这样的东西。 有类似的课程吗?

为什么必须把一个完整的代码块放在lambda体中呢?

如果在lambda函数中有一个单独的语句,我们可以省略为它定义完整的代码块: new Thread(() -> System.out.println()); 为什么不是那种抛出exception的语句呢? 这产生了编译错误,指出'{' expected : new Thread(() -> throw new RuntimeException()); 当然,在一个代码块中封装lambda体是可行的: new Thread(() -> { throw new RuntimeException(); });

有没有可用于任何lambda的无操作(NOP)的方法引用?

这可能听起来像一个奇怪的问题,但是有没有办法引用Java 8中的Lambda的标准no-op(aka null操作,null-pattern方法,no-operation,do-nothing方法)方法。 目前,我有一个方法,采取一个,例如, void foo(Consumer<Object>) ,我想给它一个无操作,我必须声明: foo(new Consumer<Object>() { public void accept(Object o) { // do nothing } } 我希望能够做到这样的事情: foo(Object::null) 代替。 有这样的东西存在吗? 不知道如何使用多参数方法 – 也许这是Java中的lambdaexpression式的一个缺陷。