Questions tagged «java-8»

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


7
使用流生成地图时忽略重复项
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress)); java.lang.IllegalStateException: Duplicate key当发现重复元素时,我得到提示。 在向地图添加值时是否可以忽略此类异常? 当有重复项时,只需忽略该重复项即可继续。
257 java  java-8  java-stream 

4
Instant和LocalDateTime有什么区别?
我知道: 即时是用于计算的“技术”时间戳表示(纳秒)。 LocalDateTime是日期/时钟表示形式,包括人类的时区。 最终,对于大多数应用程序用例,IMO都可以视为两种类型。例如:当前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了Instant和时区部分的纳秒级精度优势)的LocalDateTime)。 您可以列举一些应用示例,仅应使用Instant或LocalDateTime吗? 编辑:提防有关精度和时区的LocalDateTime的误读文档
255 java  datetime  java-8 

13
计算Java 8中两个日期之间的天数
我知道有很多关于如何获取的问题,但是我想和使用新的Java 8 Date api进行示例。我也知道JodaTime库,但是我想要一种没有外部库的工作方式。 功能需要抱怨以下限制: 防止日期保存错误 输入是两个Date对象(没有时间,我知道localdatetime,但是我需要处理日期实例)

12
从Mac移除Java 8 JDK
因此,我前一段时间安装了JDK 8 beta版,以查看一些示例。我现在确定,在版本之间进行更改很容易。 用IntelliJ做一些Play开发。由于某些原因,即使是,IntelliJ仍使用8进行编译: 我在首选项中设置了编译器以使用1.6 假设它通过外部构建使用SBT,但是命令行中的sbt可以工作 JAVA_HOME指向JDK 6。 如果转到Java“首选项”页面,它确实显示已安装8,但没有卸载选项,也看不到其他任何版本。 当我这样做时which java,它告诉我/usr/bin/java和我这样做/usr/bin/java -version,并且返回1.6。 注意:稍加摆弄,就可以使用IntelliJ和JDK7,请参见此处。

4
显式调用Java中的默认方法
Java 8引入了默认方法,以提供扩展接口的功能,而无需修改现有的实现。 我想知道当由于不同接口中的默认实现冲突而导致该方法的默认实现被重写或不可用时,是否可以显式调用该方法的默认实现。 interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // how to invoke A.foo() here? } } 考虑上面的代码,您将如何A.foo()从B类的方法调用?

3
为什么Iterable <T>不提供stream()和parallelStream()方法?
我想知道为什么Iterable接口不提供stream()和parallelStream()方法。考虑以下类别: public class Hand implements Iterable&lt;Card&gt; { private final List&lt;Card&gt; list = new ArrayList&lt;&gt;(); private final int capacity; //... @Override public Iterator&lt;Card&gt; iterator() { return list.iterator(); } } 它是一手牌的一种实现,因为您在玩交易纸牌游戏时可以手拿牌。 本质上,它包装List&lt;Card&gt;,以确保最大容量并提供其他有用的功能。最好将其直接实现为List&lt;Card&gt;。 现在,为了方便起见,我认为最好实现Iterable&lt;Card&gt;,这样,如果要遍历它,可以使用增强的for循环。(我的Hand课程也提供了一种get(int index)方法,因此Iterable&lt;Card&gt;我认为该方法是合理的。) 该Iterable界面提供了以下内容(省略了javadoc): public interface Iterable&lt;T&gt; { Iterator&lt;T&gt; iterator(); default void forEach(Consumer&lt;? super T&gt; action) { Objects.requireNonNull(action); for (T t …

3
Java 8 Lambda,Function.identity()或t-> t
Наэтотвопросестьответына 堆栈溢出нарусском:Лямбдыв爪哇8,чтолучшеиспользовать - Function.identity()илиT-&gt;吨? 我对Function.identity()方法的使用有疑问。 想象以下代码: Arrays.asList("a", "b", "c") .stream() .map(Function.identity()) // &lt;- This, .map(str -&gt; str) // &lt;- is the same as this. .collect(Collectors.toMap( Function.identity(), // &lt;-- And this, str -&gt; str)); // &lt;-- is the same as this. 是否有任何理由您应使用Function.identity()代替str-&gt;str(反之亦然)。我认为第二个选项更具可读性(当然是个人喜好了)。但是,有没有“真正的”理由为什么应该优先考虑呢?

12
将Java 8的Optional与Stream :: flatMap一起使用
新的Java 8流框架和新朋友创建了一些非常简洁的Java代码,但是我遇到了一个看似简单的情况,很难做到简洁。 考虑List&lt;Thing&gt; things和方法Optional&lt;Other&gt; resolve(Thing thing)。我想将Things 映射到Optional&lt;Other&gt;s并获得第一个Other。显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst(),但flatMap要求您返回一个流,并且Optional没有stream()方法(或者是a Collection或提供一种将其转换为或将其视为a的方法Collection)。 我能想到的最好的方法是: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); 但这对于一个很常见的案例来说似乎太漫长了。有人有更好的主意吗?

5
为什么Java Streams一次性出现?
与C#不同IEnumerable,在C#中,执行管道可以执行任意多次,而在Java中,流只能“迭代”一次。 对终端操作的任何调用都会关闭流,使其无法使用。这种“功能”带走了很多力量。 我想这不是技术原因。这种奇怪的限制背后的设计考虑是什么? 编辑:为了演示我在说什么,请考虑以下C#中的Quick-Sort实现: IEnumerable&lt;int&gt; QuickSort(IEnumerable&lt;int&gt; ints) { if (!ints.Any()) { return Enumerable.Empty&lt;int&gt;(); } int pivot = ints.First(); IEnumerable&lt;int&gt; lt = ints.Where(i =&gt; i &lt; pivot); IEnumerable&lt;int&gt; gt = ints.Where(i =&gt; i &gt; pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 现在确定,我不主张这是快速排序的良好实现!但是,这是将lambda表达与流操作相结合的表达能力的一个很好的例子。 而且用Java无法做到!我什至不能问一个流是否为空而不使它无法使用。

4
Java 8流:多个过滤器与复杂条件
有时您想过滤Stream具有多个条件的a: myList.stream().filter(x -&gt; x.size() &gt; 10).filter(x -&gt; x.isCool()) ... 或者你可以做同样的复杂条件和单 filter: myList.stream().filter(x -&gt; x.size() &gt; 10 &amp;&amp; x -&gt; x.isCool()) ... 我的猜测是第二种方法具有更好的性能特征,但我不知道。 第一种方法赢得了可读性,但是哪种性能更好?

4
为什么要使用Optional.of而不是Optional.ofNullable?
使用Java 8 Optional类时,有两种方法可以将值包装在可选值中。 String foobar = &lt;value or null&gt;; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException 我知道这Optional.ofNullable是唯一安全的使用方法Optional,但是为什么根本不Optional.of存在呢?为什么不总是使用Optional.ofNullable 并且始终保持安全呢?

6
JDK 8中的PermGen消除
我已经安装了JDK 8,并尝试运行Eclipse。我收到以下警告消息: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0 忽略此VM选项的原因是什么?
229 java  java-8  jvm  permgen 

19
将Java Stream过滤为1个且只有1个元素
我正在尝试使用Java 8 Stream来查找中的元素LinkedList。但是,我想保证过滤条件只有一个匹配项。 采取以下代码: public static void main(String[] args) { LinkedList&lt;User&gt; users = new LinkedList&lt;&gt;(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -&gt; user.getId() == 1).findAny().get(); System.out.println(match.toString()); } static class User { @Override public String toString() { return id + " - " + …

23
JDK8的WebService客户端生成错误
我需要在项目中使用Web服务。我使用NetBeans,因此右键单击我的项目,并尝试添加新的“ Web Service客户端”。上次检查时,这是创建Web服务客户端的方法。但这导致一个AssertionError,说: java.lang.AssertionError:org.xml.sax.SAXParseException; systemId:jar:文件:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber:52;columnNumber:88;schema_reference:无法读取架构文档' xjc.xsd ',因为由于accessExternalSchema属性设置的限制,不允许'文件'访问。 NetBeans的默认Java平台是JDK8(Oracle的正式版本),因此当我更改netbeans.conf文件并将JDK7(也来自Oracle)作为默认设置时,一切正常。所以我认为问题出在JDK8。这是我的java -version输出: Java版本“ 1.8.0” Java™SE运行时环境(内部版本1.8.0-b132) Java HotSpot(TM)64位服务器VM(内部版本25.0-b70,混合模式) 现在,我将JDK7保留为默认Java平台。如果有使JDK8工作的方法,请分享。

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.