标签: java-8

如何获取Java 8方法引用的MethodInfo?

请看下面的代码:

Method methodInfo = MyClass.class.getMethod("myMethod");
Run Code Online (Sandbox Code Playgroud)

这可行,但方法名称作为字符串传递,因此即使myMethod不存在,这也将编译.

另一方面,Java 8引入了方法引用功能.它在编译时检查.可以使用此功能获取方法信息吗?

printMethodName(MyClass::myMethod);
Run Code Online (Sandbox Code Playgroud)

完整示例:

@FunctionalInterface
private interface Action {

    void invoke();
}

private static class MyClass {

    public static void myMethod() {
    }
}

private static void printMethodName(Action action) {
}

public static void main(String[] args) throws NoSuchMethodException {
    // This works, but method name is passed as a string, so this will compile
    // even if myMethod does not exist
    Method methodInfo = MyClass.class.getMethod("myMethod");

    // Here we pass reference to a method. It …
Run Code Online (Sandbox Code Playgroud)

java reflection lambda java-8

68
推荐指数
5
解决办法
2万
查看次数

在Ubuntu上从JDK 1.7迁移到JDK 1.8

我在UBUNTU.目前安装的JDK版本是:

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)

正在安装的配置是:

sudo update-alternatives --config java
There is only one alternative in link group java 
(providing /usr/bin/java):     /usr/lib/jvm/java-7-oracle/jre/bin/java
Run Code Online (Sandbox Code Playgroud)

我下载了JDK 1.8的最新tar.gz存档.

如何从tar.gz轻松安装JDK 1.8覆盖/卸载当前安装的JDK 1.7?甚至没有明确使用tar.gz.

java linux ubuntu java-8

68
推荐指数
5
解决办法
12万
查看次数

如何比较数组列表与现代Java的相等性?

我有两个数组列表.

如何在不使用外部库的情况下轻松地将这些与Java 8及其功能的相等性进行比较?我正在寻找一个"更好"(更高级别,更短,更高效)的解决方案,而不是像这样的强力代码(未经测试的代码,可能包含错别字等,而不是问题的重点):

boolean compare(List<String[]> list1, List<String[]> list2) 
{
    // tests for nulls etc omitted
    if(list1.size() != list2.size()) {
       return false;
    }
    for(i=0; i<list1.size(); ++i) {
        if(!Arrays.equals(list1.get(i), list2.get(i))) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果没有更好的方法,这也是一个有效的答案.

额外奖励:如果Java 9提供了更好的Java 8可以提供的方式,请随时提及它.

编辑:看完评论后,看看这个问题是如何变得适度热,我认为" 更好 "应该包括在检查数组内容之前首先检查所有数组的长度,因为这有可能更快地找到不等式,如果内在的话数组很长.

java arrays list equals java-8

68
推荐指数
5
解决办法
9667
查看次数

如何使用Java 8创建无限流

有没有一种简单的方法可以使用没有外部库的创建无限流?

例如在Scala中:

Iterator.iterate(0)(_ + 2)
Run Code Online (Sandbox Code Playgroud)

java java-8

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

接口方法可以有一个体?

我知道界面就像100%纯抽象类.所以,它不能有方法实现.但是,我看到了一个奇怪的代码.有人能解释一下吗?

代码片段:

 interface Whoa {
        public static void doStuff() {
            System.out.println("This is not default implementation");
        }
 }
Run Code Online (Sandbox Code Playgroud)

编辑:

我的IDE是Intellij Idea 13.1.项目SDK是java 7 <1.7.0_25>.IDE未显示任何编译器错误.但是,当我在命令行编译代码时,我收到以下消息.

Whoa.java:2: error: modifier static not allowed here
    public static void doStuff() {
                       ^
Run Code Online (Sandbox Code Playgroud)

java interface default-implementation java-8

67
推荐指数
3
解决办法
7万
查看次数

org.apache.tomcat.util.bcel.classfile.ClassFormatException:常量池中的无效字节标记:15

我正在将Tomcat 7中的webapp移植到另一台使用Tomcat 7但使用Java 8的服务器上.

Tomcat成功启动但在日志中catalina.out我得到:

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
    at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131)
    at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60)
    at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209)
    at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2049)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1899)
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1885)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:346)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

java eclipse tomcat java-8 classformatexception

67
推荐指数
3
解决办法
13万
查看次数

列出<Future>到Future <List>序列

我想转换List<CompletableFuture<X>>CompletableFuture<List<T>>.这非常有用,因为当您有许多异步任务并且需要获得所有异步任务的结果时.

如果其中任何一个失败,则最终的未来将失败.这就是我实施的方式:

  public static <T> CompletableFuture<List<T>> sequence2(List<CompletableFuture<T>> com, ExecutorService exec) {
        if(com.isEmpty()){
            throw new IllegalArgumentException();
        }
        Stream<? extends CompletableFuture<T>> stream = com.stream();
        CompletableFuture<List<T>> init = CompletableFuture.completedFuture(new ArrayList<T>());
        return stream.reduce(init, (ls, fut) -> ls.thenComposeAsync(x -> fut.thenApplyAsync(y -> {
            x.add(y);
            return x;
        },exec),exec), (a, b) -> a.thenCombineAsync(b,(ls1,ls2)-> {
            ls1.addAll(ls2);
            return ls1;
        },exec));
    }
Run Code Online (Sandbox Code Playgroud)

要运行它:

ExecutorService executorService = Executors.newCachedThreadPool();
        Stream<CompletableFuture<Integer>> que = IntStream.range(0,100000).boxed().map(x -> CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep((long) (Math.random() * 10));
            } catch (InterruptedException e) {
                e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

java concurrency java-8 completable-future

67
推荐指数
5
解决办法
3万
查看次数

Java 8 Streams可以对集合中的项目进行操作,然后将其删除吗?

就像几乎所有人一样,我仍然在学习新的Java 8 Streams API的复杂性(并且非常喜欢它们).我有一个关于流的使用的问题.我将提供一个简化的例子.

Java Streams允许我们使用a Collection,并使用stream()它上面的方法来接收所有元素的流.在这,有许多有用的方法,比如filter(),map()forEach(),这让我们对内容的使用拉姆达操作.

我的代码看起来像这样(简化):

set.stream().filter(item -> item.qualify())
    .map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());
Run Code Online (Sandbox Code Playgroud)

我们的想法是获取集合中所有项目的映射,这些项目匹配某个限定符,然后通过它们进行操作.操作后,它们不再用于其他目的,应从原始组中移除.代码运作良好,但我无法摆脱这样的感觉,即有一个操作Stream可以在一行中为我做这件事.

如果它在Javadocs中,我可能会忽略它.

是否有人更熟悉API会看到类似的东西?

java collections filtering java-8 java-stream

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

Java 8中findAny()和findFirst()之间的区别

我有点困惑之间Stream#findAny(),并Stream#findFirst()在的 Stream在Java API 8.

我理解的是,两者都将从流中返回第一个匹配的元素,例如,当与过滤器一起使用时?

那么,为什么两种方法相同的任务呢?我错过了什么吗?

java java-8 java-stream

67
推荐指数
4
解决办法
3万
查看次数

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
查看次数