Questions tagged «java-8»

对于2014年3月18日发行的Java平台的第8版(内部版本1.8)特定于Java 8的问题,请使用此标记。在大多数情况下,您还应该指定java标记。

3
Collectors.toList()返回哪种List <E>?
我正在阅读Lambda状态:图书馆版,但对以下陈述感到惊讶: 在Streams部分下,有以下内容: List&lt;Shape&gt; blue = shapes.stream() .filter(s -&gt; s.getColor() == BLUE) .collect(Collectors.toList()); 该文件没有说明shapes实际的内容,我也不知道它是否重要。 让我感到困惑的是:List此代码块返回什么样的具体代码? 它将变量分配给List&lt;Shape&gt;,这是完全可以的。 stream()也不filter()决定要使用哪种列表。 Collectors.toList()均未指定的具体类型List。 那么,这里使用的是什么具体类型(子类)List?有保证吗?

2
Java 8 pass方法作为参数
当前正在学习Java 8 lambda表达式和方法参考。 我想将不带参数且没有返回值的方法作为参数传递给另一个方法。这就是我的做法: public void one() { System.out.println("one()"); } public void pass() { run(this::one); } public void run(final Function function) { function.call(); } @FunctionalInterface interface Function { void call(); } 我知道有一组预定义功能接口的java.util.function,如Function&lt;T,R&gt;,但我没有找到一个不带任何参数,而不是产生结果。

6
在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) 正在安装的配置是: 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 我下载了JDK 1.8的最新tar.gz档案。 如何从覆盖/卸载当前安装的JDK 1.7的tar.gz中轻松安装JDK 1.8?甚至没有明确使用tar.gz。
69 java  linux  ubuntu  java-8 


3
为什么使用invokedynamic调用Java 8 lambda?
该invokedynamic指令用于帮助VM在运行时确定方法引用,而不是在编译时对其进行硬接线。 这对于动态语言非常有用,在动态语言中直到运行时才知道确切的方法和参数类型。但是Java lambda并非如此。它们被转换为带有定义明确的参数的静态方法。并且可以使用调用此方法invokestatic。 那么,invokedynamic对于lambda的需求是什么,尤其是在性能受到影响时?
69 java  lambda  jvm  java-8  bytecode 

3
Java 8 Boolean.logicalOr方法
在Java 8中,Boolean添加了类中的新方法。 让我们只谈论其中之一 public static boolean Boolean.logicalOr(boolean a , boolean b) 现在,我的问题是,为什么需要它们? 以下两种情况有什么区别? boolean result = a || b; 要么 Boolean result = Boolean.logicalOr(a,b); 有什么特别之处Boolean.logicalOr(),我什么时候应该更喜欢一个。
69 java  java-8 

6
使用Java 8 Clock对类进行单元测试
引入了Java 8 java.time.Clock,可以将其用作许多其他java.time对象的参数,从而使您可以向其中注入真实或虚假的时钟。例如,我知道您可以创建一个Clock.fixed()然后调用Instant.now(clock),它将返回Instant您提供的固定内容。这听起来很适合单元测试! 但是,我很难弄清楚如何最好地使用它。我有一个课,类似于以下内容: public class MyClass { private Clock clock = Clock.systemUTC(); public void method1() { Instant now = Instant.now(clock); // Do something with 'now' } } 现在,我要对该代码进行单元测试。我需要能够设置clock固定的时间,以便可以method()在不同的时间进行测试。显然,我可以使用反射将clock成员设置为特定值,但是如果我不必求助于反射,那就太好了。我可以创建一个公共setClock()方法,但这感觉不对。我不想Clock在方法中添加参数,因为真正的代码不必关心传递时钟。 处理此问题的最佳方法是什么?这是新代码,因此我可以重新组织该类。 编辑:为澄清起见,我需要能够构造一个MyClass对象,但必须能够使一个对象看到两个不同的时钟值(好像是常规系统时钟一样)。因此,我无法将固定时钟传递给构造函数。

7
Java 8中的可选链接
寻找一种链接可选项的方法,以便返回存在的第一个。如果不存在,Optional.empty()应返回。 假设我有几种这样的方法: Optional&lt;String&gt; find1() 我正在尝试将它们链接起来: Optional&lt;String&gt; result = find1().orElse( this::find2 ).orElse( this::find3 ); 但是当然这是行不通的,因为orElse期望一个值并且orElseGet期望一个Supplier。
68 java  lambda  java-8  optional 

1
默认方法会在一段时间内返回true,然后返回false?(可能的JVM错误)
我的以下代码有问题,我隔离为最封闭的形式,我使用的是Java 8,该代码几乎可以启动了(2014年3月18日),因此我预计实现本身不会出现严重问题,因此可能/必须是我自己的代码: 注意:该代码是用Java 8编写的,它具有各种新功能,包括default接口中的方法实现。 public abstract class Drawable implements DrawableInterface { } interface DrawableInterface { default public boolean isShadowReceiver() { return false; } default public boolean isShadowCaster() { return false; } } public interface ShadowDrawable extends DrawableInterface { @Override default public boolean isShadowReceiver() { return true; } @Override default public …

13
将列表沿元素拆分为子列表
我有这个清单(List&lt;String&gt;): ["a", "b", null, "c", null, "d", "e"] 我想要这样的东西: [["a", "b"], ["c"], ["d", "e"]] 换句话说,我想使用null值作为分隔符将列表拆分为子列表,以获得列表列表(List&lt;List&lt;String&gt;&gt;)。我正在寻找Java 8解决方案。我已经尝试过,Collectors.partitioningBy但是我不确定这是我要找的东西。谢谢!
67 java  list  java-8  collectors 


6
包含自身作为元素的ArrayList的哈希码
我们可以发现hashcode的list是本身含有的element? 我知道这是一个坏习惯,但这就是面试官的要求。 当我运行以下代码时,它抛出StackOverflowError: public class Main { public static void main(String args[]) { ArrayList&lt;ArrayList&gt; a = new ArrayList(); a.add(a); a.hashCode(); } } 现在,我有两个问题: 为什么会有一个StackOverflowError? 是否可以通过这种方式找到哈希码?

5
如何避免重复代码初始化hashmap的hashmap?
每个客户都有一个ID,以及许多带有日期的发票,这些日期按ID存储为客户的Hashmap,即按日期的发票哈希图: HashMap&lt;LocalDateTime, Invoice&gt; allInvoices = allInvoicesAllClients.get(id); if(allInvoices!=null){ allInvoices.put(date, invoice); //&lt;---REPEATED CODE }else{ allInvoices = new HashMap&lt;&gt;(); allInvoices.put(date, invoice); //&lt;---REPEATED CODE allInvoicesAllClients.put(id, allInvoices); } Java解决方案似乎是要使用的getOrDefault: HashMap&lt;LocalDateTime, Invoice&gt; allInvoices = allInvoicesAllClients.getOrDefault( id, new HashMap&lt;LocalDateTime, Invoice&gt; (){{ put(date, invoice); }} ); 但是,如果get不为null,我仍然希望执行put(日期,发票),并且仍然需要将数据添加到“ allInvoicesAllClients”。因此,它似乎并没有太大帮助。
27 java  java-8  hashmap 

1
为什么不使用自定义比较器从TreeSet中删除,则会删除较大的项集?
同时使用Java 8和Java 11,将以下内容TreeSet与String::compareToIgnoreCase比较器一起考虑: final Set&lt;String&gt; languages = new TreeSet&lt;&gt;(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] 当我尝试删除中存在的确切元素时TreeSet,它起作用:所有指定的元素均被删除: languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] 但是,如果我尝试删除的内容超过了中的所有内容TreeSet,则该调用根本不会删除任何内容(这不是后续调用,而是被调用了,而不是上面的代码段): languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] 我究竟做错了什么?为什么会这样呢? 编辑:String::compareToIgnoreCase是有效的比较器: (l, r) -&gt; l.compareToIgnoreCase(r)

7
如何在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) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.