标签: java-8

Java stream()。noneMatch(...)和!stream()。anyMatch(...)之间的区别

如果我这样做,性能或其他方面是否有差异?

  1. list.stream().noneMatch(...)
  2. !list.stream().anyMatch(...)

java java-8 java-stream

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

为什么方法引用与带有不同数量args的功能接口兼容?

我了解,如果所引用的方法与功能接口具有相同数量的args并返回相同的类型,则可以使用方法引用来实现功能接口,但是为什么在某些情况下,所引用的方法与功能接口具有不同数量的args但仍然兼容吗?

我有一个简单的BiConsumer,我尝试使用方法引用来实现它。我知道只要args的数量匹配,我也可以使用lambda表达式。我将显示代码以清楚地说明它。

我有一个BiConsumer<ArrayList<String>, ? super String>我要实现的。

Lambda表达式的实现方式是:

BiConsumer<ArrayList<String>, ? super String> b = (firstArg,secondArg) -> firstArg.add(secondArg); 由于它们都带有2个输入参数,因此没有问题。

但是为什么BiConsumer<ArrayList<String>, ? super String> a = ArrayList::add;也兼容?addArrayList上的方法仅需要1个输入args,而功能接口则需要2个。

任何答案将不胜感激。谢谢!

java java-8 functional-interface method-reference

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

Java 8:如何使用设备设置的语言环境解析DayOfWeek

为什么每当我设置DayOfWeek为我的TextView输出总是出现在大写字母?另外,更改设备语言后,日子永远不会改变。如何将其设置为根据设备的当前语言环境进行更改?

    myTv.text = DayOfWeek.MONDAY.toString()
Run Code Online (Sandbox Code Playgroud)

输出量

MONDAY
Run Code Online (Sandbox Code Playgroud)

java dayofweek java-8 kotlin

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

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

从嵌套可选检查中的列表中获取元素

我有以下嵌套的空检查。试图通过使其可读,Optional但如何映射第一个元素?

卡在下面,不确定如何映射这条线

vo.getSomething().getAnother().get(0)
Run Code Online (Sandbox Code Playgroud)

我被困在三号线

Optional.of(vo.getSomething)
    .map(Something::getAnother)
    .map(List<Another>::get(0)) // will not work
Run Code Online (Sandbox Code Playgroud)

这是一个有效的空检查。我正在尝试使用Optional清理它。

if(vo.getSomething() != null){
    if(vo.getSomething().getAnother() != null){
        if(vo.getSomething().getAnother().get(0) != null){
            if(vo.getSomething().getAnother().get(0).getInner() != null){
                if(vo.getSomething().getAnother().get(0).getInner() != null){
                    if(vo.getSomething().getAnother().get(0).getInner().get(0) != null){
                        return vo.getSomething().getAnother().get(0).getInner().get(0).getProductName();
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java optional java-8

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

为什么在不安全的操作之后而不是在整个forEach循环之后抛出ConcurrentModificationException?

通常,在进行迭代时进行修改会立即引发ConcurrentModificationException。

但是,使用流API的forEachOrdered方法,每次修改后都不会引发Exception。取而代之的是,修改可以在迭代过程中成功进行,并且最终在整个操作完成后会引发异常。有人可以告诉我这是怎么发生的吗?

下面的代码生成3个随机数,范围从-0.5到0.5。然后过滤掉负值。

        HashMap<Integer, Double> positiveNegative = new HashMap<>();
        for (int i = 0; i < 3; i++) {
            double value =Math.random() - 0.5;
            positiveNegative.put(i, value);
        }

        System.out.println(positiveNegative);

        //filter out the negative value
        positiveNegative.entrySet().stream()
                .filter((entry) -> (entry.getValue() < 0))
                .forEachOrdered(entry -> {
                    System.out.println(entry);
                    positiveNegative.remove(entry.getKey());
                    System.out.println(positiveNegative);
                });

        System.out.println(positiveNegative);
Run Code Online (Sandbox Code Playgroud)
{0=-0.38785299800912576, 1=-0.11085161629013052, 2=-0.3516129030809366}
0=-0.38785299800912576
{1=-0.11085161629013052, 2=-0.3516129030809366}
1=-0.11085161629013052
{2=-0.3516129030809366}
2=-0.3516129030809366
{}

Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1751)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEachOrdered(ReferencePipeline.java:502)
    at Solution.main(Solution.java:51)
Run Code Online (Sandbox Code Playgroud)

lambda java-8 java-stream

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

Extend a final class or replace it

"No, it can't be done"

It has been discussed a lot of times and the only reply is "No, it can't be done". But guys we do code. Everything is theoretically possible with some time.

Problem

Basically I'm trying to extend a final class to change a single behavior. That can't be done in a traditional way - at compile time with an extend keyword. I have looked for some other ways:

  • create a proxy - that works only for …

java final java-8

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

将此“ yyyy-MM-dd'T'HH:mm:ss.SSSXXX”格式的字符串转换为LocalDate

我想将字符串日期(指定了时区)转换为LocalDate。

String format = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String date = "2019-08-31T17:00:00.000-07:00";

System.out.println("LocalDate: " + LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));
System.out.println("Date: " + new SimpleDateFormat(format).parse(date));
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是

LocalDate: 2019-08-31
Date: Sun Sep 01 05:30:00 IST 2019
Run Code Online (Sandbox Code Playgroud)

我无法获得与SimpleDateFormat相同的结果。我想要LocalDate中的2019-09-01。

java simpledateformat java-8 localdate

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

查找地图是否包含集合中的值

我想查看我的Set中是否有任何值用作Map中的键。

我可以做:

Set<String> foo;
for (String val: foo) {
    if (map.containsKey(val)) {
        contains = true;
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么凉吗?

java java-8

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

为什么我们可以在Optional.of()上调用.orElse()?

我很好奇为什么有可能这样做(至少在Java 8上如此):

Optional.of(null).orElse("something");
Run Code Online (Sandbox Code Playgroud)

Optional.of(null)基本上是保证的空指针。使得对其进行调用.orElse()成为可能,使笨拙的开发人员意外陷入困境。我一直在四处看看是否有任何理由。也许在某些情况下这应该解决?

java optional java-8

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