标签: java-8

流式传输到新集合的集合

我正在寻找最无痛的方法来过滤集合.我在想类似的东西

Collection<?> foo = existingCollection.stream().filter( ... ). ...
Run Code Online (Sandbox Code Playgroud)

但我不确定如何最好从过滤器,返回或填充另一个集合.大多数例子似乎都像"在这里你可以打印".可能有一个我缺少的构造函数或输出方法.

java java-8 java-stream

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

为什么java.util.Collection没有实现新的Stream接口?

我花了一些时间开始研究关于流和lambdas的java-8嗡嗡声.让我吃惊的是,你不能应用流操作,例如.map(),.filter()直接上java.util.Collection.是否存在技术原因导致java.util.Collection接口未通过这些Stream操作的默认实现进行扩展?

谷歌搜索了一下,我看到很多人按照以下模式编码的例子:

List<String> list = someListExpression;
List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果你的代码中有很多这些流操作,那就变得非常笨拙了.由于.stream()并且.collect()与您想表达的内容完全无关,您宁愿说:

List<String> list = someListExpression;
List<String> anotherList = list.map(x -> f(x));
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

47
推荐指数
1
解决办法
3445
查看次数

为什么继承类静态方法而不继承接口静态方法?

我知道在Java中,静态方法就像实例方法一样继承,不同之处在于,当重新声明它们时,父实现被隐藏而不是被覆盖.好吧,这很有道理.但是,Java教程指出了这一点

接口中的静态方法永远不会被继承.

为什么?常规和接口静态方法有什么区别?

当我说静态方法可以继承时,让我澄清一下我的意思:

class Animal {
    public static void identify() {
        System.out.println("This is an animal");
    }
}
class Cat extends Animal {}

public static void main(String[] args) {
    Animal.identify();
    Cat.identify(); // This compiles, even though it is not redefined in Cat.
}
Run Code Online (Sandbox Code Playgroud)

然而,

interface Animal {
    public static void identify() {
        System.out.println("This is an animal");
    }
}
class Cat implements Animal {}

public static void main(String[] args) {
    Animal.identify();
    Cat.identify(); // This does not compile, because interface …
Run Code Online (Sandbox Code Playgroud)

java inheritance static-methods interface java-8

47
推荐指数
3
解决办法
9633
查看次数

根据Java 8中的LocalDate.now()获取一周的第一天的日期

我希望根据LocalDate.now()得到一周中第一天的日期.使用JodaTime可以实现以下功能,但似乎已从Java 8中的新Date API中删除.

LocalDate now = LocalDate.now();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY));
Run Code Online (Sandbox Code Playgroud)

我不能称'withDayOfWeek()',因为它不存在.

所以我的问题是:如何根据一些LocalDate获取一周中第一天的日期?

java java-8

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

Lambda完全没有做任何事情

我需要有一个Runnable没有做任何事情的函数接口的lambda表达式.我曾经有过一种方法

private void doNothing(){
    //Do nothing
}
Run Code Online (Sandbox Code Playgroud)

然后使用this::doNothing.但我发现了一个更短的方法来做到这一点.

java lambda runnable java-8

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

在Java 8中,为什么Arrays没有给出Iterable的forEach方法?

我必须在这里遗漏一些东西.

在Java 5中,引入了"for-each loop"语句(也称为增强for循环).它似乎主要是为了遍历集合而引入的.任何实现该Iterable接口的集合(或容器)类都可以使用"for-each循环"进行迭代.也许出于历史原因,Java阵列没有实现Iterable接口.但是由于数组无处不在,所以javac会接受在数组上使用for-each循环(生成相当于传统for循环的字节码).

在Java 8中,该forEach方法Iterable作为默认方法添加到接口.这使得将lambda表达式传递给集合(迭代时)成为可能(例如list.forEach(System.out::println)).但同样,阵列不喜欢这种治疗方法.(我知道有解决方法).

有没有技术上的原因为什么javac无法增强以接受forEach中的数组,就像它在增强的for循环中接受它们一样?似乎可以在不要求阵列实现的情况下生成代码Iterable.我天真吗?

这对于自然使用数组的语言的新手来说尤其重要,因为它们的语法容易.切换到列表和使用是不自然的Arrays.asList(1, 2, 3).

java arrays foreach javac java-8

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

为什么Duration类没有'toSeconds()'方法?

我正在查看Java 8 中的Duration类,并注意到它没有:

long toSeconds();
Run Code Online (Sandbox Code Playgroud)

但它有其他所有toXXXXX()可以获得天,小时,分钟,毫秒,纳米.我确实看到一个getSeconds()方法返回此持续时间对象中的秒数.还有一种get(TemporalUnit unit)方法可以将持续时间作为请求的时间单位.但为什么不保持toSeconds()方法的一致性?

java api-design java-8

47
推荐指数
2
解决办法
4160
查看次数

为什么Java不允许多重继承,但允许使用默认实现符合多个接口

我不问这个 - > 为什么Java中没有多重继承,但允许实现多个接口?

在Java中,不允许多重继承,但是,在Java 8之后,Interfaces可以拥有默认方法(可以自己实现方法),就像抽象类一样.在此上下文中,还应允许多重继承.

interface TestInterface 
{ 
    // abstract method 
    public void square(int a); 

    // default method 
    default void show() 
    { 
      System.out.println("Default Method Executed"); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

java inheritance interface abstract java-8

47
推荐指数
5
解决办法
4733
查看次数

UnsupportedOperationException - 为什么不能在java.sql.Date上调用onInstant()?

java.util.Date班有一个名为方法toInstant()的转换Date实例到java.time.Instant.

java.sql.Date类扩展了java.util.Date类,但当我尝试调用toInstant()java.sql.Date,我收到一个UnsupportedOperationException.

为什么toInstant()不支持操作java.sql.Date

什么是"正确"的方式到转换java.sql.Datejava.time.Instant

java java-8 java-time

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

如何在java8中获取默认的ZoneOffset?

使用java8我们知道使用ZoneId.default()可以获得系统默认值ZoneId,但如何获取默认值ZoneOffset

我看到一个ZoneId有一些"规则",每个规则都有一个ZoneOffset,这意味着一个ZoneId可能有一个以上ZoneOffset吗?

java timezone timezone-offset java-8

46
推荐指数
1
解决办法
4万
查看次数