标签: java-8

Java 8中的实例方法引用类型之间有什么区别?

所以Java 8引入了方法引用,文档描述了这四种类型.

我的问题是两种实例类型之间的区别是什么?

  1. 引用特定对象的实例方法.
  2. 引用特定类型的任意对象的实例方法.

两者都参考参考但有什么显着不同?用于解决它们的类型推断是不同的吗?重要的是(在他们的例子中)一个是闭包而另一个是lambda?它与方法的参数数量有关吗?

java java-8 method-reference

20
推荐指数
1
解决办法
2621
查看次数

无法解决android studio中的符号'java.time.LocalDate'错误

我试图在我的Android应用程序中使用java.time.LocalDate,但是如果我尝试导入它,那么java.time中的任何类都会在Android Studio 1.1中无法解析符号错误

我能解决这个问题的唯一原因是它不支持java 8.真的是这样吗?

java android java-8 android-studio java-time

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

如何从DirectoryStream创建流

在阅读API时,DirectoryStream我错过了很多功能.首先,它建议使用for循环从流到List.我想念它DirectoryStream不是一个事实Stream.

我怎样才能让一个Stream<Path>DirectoryStreamJava中8?

java java-8 java-stream

20
推荐指数
2
解决办法
5774
查看次数

来自HashSet的并行流不会并行运行

我有要并行处理的元素集合.当我使用a时List,并行性有效.但是,当我使用a时Set,它并不是并行运行的.

我写了一个显示问题的代码示例:

public static void main(String[] args) {
    ParallelTest test = new ParallelTest();

    List<Integer> list = Arrays.asList(1,2);
    Set<Integer> set = new HashSet<>(list);

    ForkJoinPool forkJoinPool = new ForkJoinPool(4);

    System.out.println("set print");
    try {
        forkJoinPool.submit(() ->
            set.parallelStream().forEach(test::print)
        ).get();
    } catch (Exception e) {
        return;
    }

    System.out.println("\n\nlist print");
    try {
        forkJoinPool.submit(() ->
            list.parallelStream().forEach(test::print)
        ).get();
    } catch (Exception e) {
        return;
    }   
}

private void print(int i){
    System.out.println("start: " + i);
    try {
        TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
    }
    System.out.println("end: …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing lambda java-8 java-stream

20
推荐指数
1
解决办法
5992
查看次数

Java"空白的最终字段可能尚未初始化"Anonymous Interface vs Lambda Expression

我最近遇到了错误消息"空白的最终字段obj可能尚未初始化".

通常情况下,如果您尝试引用可能尚未分配给值的字段.示例类:

public class Foo {
    private final Object obj;
    public Foo() {
        obj.toString(); // error           (1)
        obj = new Object();
        obj.toString(); // just fine       (2)
    }
}
Run Code Online (Sandbox Code Playgroud)

我用Eclipse.在行中(1)我得到错误,在行中(2)一切正常.到目前为止这是有道理的.

接下来,我尝试obj在构造函数内创建的匿名接口中访问.

public class Foo {
    private Object obj;
    public Foo() {
        Runnable run = new Runnable() {
            public void run() {
                obj.toString(); // works fine
            }
        };
        obj = new Object();
        obj.toString(); // works too
    }
}
Run Code Online (Sandbox Code Playgroud)

这也有效,因为我obj在创建界面时无法访问.我也可以将我的实例传递给其他地方,然后初始化对象obj然后运行我的界面.(但null在使用之前检查是否合适). …

java compiler-construction lambda constructor java-8

20
推荐指数
2
解决办法
9687
查看次数

用于解决fibonacci的Java 8 Lambda表达式(非递归方式)

我是Java 8中使用Lambda表达式功能的初学者.Lambda表达式在解决Prime数字检查,阶乘等程序方面非常有用.

然而,它们可以有效地用于解决像Fibonacci这样的问题,其中当前值取决于前两个值的总和.我已经很好地使用Lambda表达式有效地解决了素数检查问题.下面给出了相同的代码.

boolean checkPrime=n>1 && LongStream.range(2, (long) Math.sqrt(n)).parallel().noneMatch(e->(n)%e==0);
Run Code Online (Sandbox Code Playgroud)

在方法的上述代码中,noneMatch我们使用范围中的当前值(e)进行评估.但对于Fibonacci问题,我们需要前两个值.

我们怎样才能实现呢?

java lambda functional-programming java-8 java-stream

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

Java 8 Stream:如何将当前元素与下一个元素进行比较?

如何从List使用Java 8 Streams 获取下一个元素?

如果我迭代a List,我想比较当前与列表的下一个元素.

是否可以使用Java 8 Stream?

java java-8 java-stream

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

如何使用流外部的值使用Java流API创建映射?

我想初始化Map<String, BigDecimal>并希望始终BigDecimal从流外部添加相同的值.

BigDecimal samePrice;
Set<String> set;

set.stream().collect(Collectors.toMap(Function.identity(), samePrice));
Run Code Online (Sandbox Code Playgroud)

但是Java抱怨如下:

收集器类型中的Map(Function,Function)方法不适用于参数(Function,BigDecimal)

为什么我不能从外面使用BigDecimal?如果我写:

set.stream().collect(Collectors.toMap(Function.identity(), new BigDecimal()));
Run Code Online (Sandbox Code Playgroud)

它会起作用,但那当然不是我想要的.

java java-8 java-stream collectors

20
推荐指数
3
解决办法
3488
查看次数

Java 8 lambda过滤基于条件和顺序

我试图根据多个条件筛选列表,排序.

class Student{
        private int Age;
        private String className;
        private String Name;

        public Student(int age, String className, String name) {
            Age = age;
            this.className = className;
            Name = name;
        }

        public int getAge() {
            return Age;
        }

        public void setAge(int age) {
            Age = age;
        }

        public String getClassName() {
            return className;
        }

        public void setClassName(String className) {
            this.className = className;
        }

        public String getName() {
            return Name;
        }

        public void setName(String name) {
            Name = name;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个清单,请说 …

java lambda java-8 java-stream

20
推荐指数
2
解决办法
799
查看次数

如何在Java 8中创建阻止后台加载程序?

如何在Java 8中创建合适的后台加载程序?条件:

  • 数据应在后台加载
  • 加载后应显示数据
  • 加载数据时,不应接受其他任何请求
  • 如果在加载数据时有请求,则应在某个超时(例如5秒)后安排另一次加载

目的是例如使重新加载请求被接受,但数据库不被请求所淹没。

MCVE

这是MCVE。它由一个后台任务组成,该任务通过简单地调用Thread.sleep 2秒钟来模拟加载。每秒安排一次任务,这自然会导致后台加载任务重叠,因此应避免。

public class LoadInBackgroundExample {

  /**
   * A simple background task which should perform the data loading operation. In this minimal example it simply invokes Thread.sleep
   */
  public static class BackgroundTask implements Runnable {

    private int id;

    public BackgroundTask(int id) {
      this.id = id;
    }

    /**
     * Sleep for a given amount of time to simulate loading.
     */
    @Override
    public void run() {

      try {

        System.out.println("Start #" + id + …
Run Code Online (Sandbox Code Playgroud)

java multithreading java-8

20
推荐指数
3
解决办法
457
查看次数