如果我这样做,性能或其他方面是否有差异?
list.stream().noneMatch(...)!list.stream().anyMatch(...)我了解,如果所引用的方法与功能接口具有相同数量的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个。
任何答案将不胜感激。谢谢!
为什么每当我设置DayOfWeek为我的TextView输出总是出现在大写字母?另外,更改设备语言后,日子永远不会改变。如何将其设置为根据设备的当前语言环境进行更改?
myTv.text = DayOfWeek.MONDAY.toString()
Run Code Online (Sandbox Code Playgroud)
输出量
MONDAY
Run Code Online (Sandbox Code Playgroud) 这有效
Supplier<Double> random1 = () -> Math.random();
Run Code Online (Sandbox Code Playgroud)
为什么这样不起作用:
Supplier<Double> random2 = () -> Math::random
Run Code Online (Sandbox Code Playgroud) 我有以下嵌套的空检查。试图通过使其可读,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) 通常,在进行迭代时进行修改会立即引发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) 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.
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:
我想将字符串日期(指定了时区)转换为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。
我想查看我的Set中是否有任何值用作Map中的键。
我可以做:
Set<String> foo;
for (String val: foo) {
if (map.containsKey(val)) {
contains = true;
break
}
}
Run Code Online (Sandbox Code Playgroud)
有什么凉吗?
我很好奇为什么有可能这样做(至少在Java 8上如此):
Optional.of(null).orElse("something");
Run Code Online (Sandbox Code Playgroud)
Optional.of(null)基本上是保证的空指针。使得对其进行调用.orElse()成为可能,使笨拙的开发人员意外陷入困境。我一直在四处看看是否有任何理由。也许在某些情况下这应该解决?