Questions tagged «java-8»

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

7
Java 8 Streams-收集与减少
什么时候使用collect()vs reduce()?有没有人有好的,具体的例子说明何时最好以一种或另一种方式走? Javadoc提到collect()是一个可变的reduce。 鉴于这是一个可变的减少,我假设它需要同步(内部),这反过来可能对性能造成不利影响。大概reduce()更容易并行化,但需要在精简的每个步骤之后都必须创建新的数据结构以返回以作为代价。 上面的陈述是猜测,不过,我很乐意在此鸣叫。
143 java  java-8  java-stream 

4
为什么在Java 8中转换类型的reduce方法需要组合器
我无法完全理解combinerStreams reduce方法中扮演的角色。 例如,以下代码不会编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length()); 编译错误说:( 参数不匹配; int无法转换为java.lang.String) 但是这段代码可以编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(), (accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2); 我知道合并器方法用于并行流中,因此在我的示例中将两个中间累积的int加在一起。 但是我不明白为什么第一个示例没有组合器就无法编译,或者组合器是如何将字符串转换为int的,因为它只是将两个int加在一起。 谁能阐明这一点?
141 java  java-8  java-stream 

4
Java 8:Streams与Collections的性能
我是Java 8的新手。我仍然不了解API的详细信息,但是我做了一个小型的非正式基准测试,以比较新Streams API与旧版Collections的性能。 该测试包括过滤的列表Integer,并针对每个偶数计算平方根并将其存储在结果List中Double。 这是代码: public static void main(String[] args) { //Calculating square root of even numbers from 1 to N int min = 1; int max = 1000000; List<Integer> sourceList = new ArrayList<>(); for (int i = min; i < max; i++) { sourceList.add(i); } List<Double> result = new …

7
在Java 8中,如何使用lambda将Map <K,V>转换为另一个Map <K,V>?
我刚刚开始研究Java 8,并尝试了lambda,我认为我想尝试重写最近写的一件非常简单的东西。我需要将字符串映射到列映射转换为另一个字符串映射到列映射,其中新映射中的列是第一个映射中列的防御性副本。列具有复制构造函数。到目前为止,我最接近的是: Map&lt;String, Column&gt; newColumnMap= new HashMap&lt;&gt;(); originalColumnMap.entrySet().stream().forEach(x -&gt; newColumnMap.put(x.getKey(), new Column(x.getValue()))); 但我敢肯定,必须有更好的方法来完成这项工作,对于您的建议我将不胜感激。
140 java  map  lambda  java-8  java-stream 

3
为什么不推荐使用Cloneable?
众所周知,CloneableJava 中的接口已损坏。造成这种情况的原因很多,我将不再赘述。其他人已经做到了。这也是Java架构师本身的立场。 因此,我的问题是:为什么还不被弃用?如果核心Java团队已确定它已损坏,那么他们还必须考虑过时。他们反对这样做的原因是什么(在Java 8中仍然不推荐使用)?

6
Java中的可选orElse可选
我一直在使用Java 8中的新Optional类型,并且遇到了似乎不受功能支持的常见操作:“ orElseOptional” 考虑以下模式: Optional&lt;Result&gt; resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional&lt;Result&gt; resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } 这种模式有多种形式,但是归结为希望在一个可选函数上使用一个“ orElse”,该函数需要一个函数来生成一个新的可选变量,只有当当前的不存在该函数时才调用它。 它的实现如下所示: public Optional&lt;T&gt; orElse(Supplier&lt;Optional&lt;? extends T&gt;&gt; otherSupplier) { return value != null ? this : other.get(); } 我很好奇是否有这种方法不存在的原因,是否以一种意想不到的方式使用Optional,以及人们想出了什么其他方式来处理这种情况。 我应该说,我认为涉及定制实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。 另外,如果有人知道,这种方法是否会包含在JDK 9中,我可以在哪里提出这种方法?对我来说,这似乎是对API的明显忽略。
137 java  lambda  java-8  optional  java-9 

6
在Java流中,peek真的仅用于调试吗?
我正在阅读有关Java流的信息,并在不断学习中发现新事物。我发现的新peek()功能之一就是功能。我偷看的几乎所有内容都说应将其用于调试Streams。 如果我有一个Stream,其中每个帐户都有一个用户名,密码字段以及一个login()和LoggedIn()方法,该怎么办? 我也有 Consumer&lt;Account&gt; login = account -&gt; account.login(); 和 Predicate&lt;Account&gt; loggedIn = account -&gt; account.loggedIn(); 为什么会这么糟糕? List&lt;Account&gt; accounts; //assume it's been setup List&lt;Account&gt; loggedInAccount = accounts.stream() .peek(login) .filter(loggedIn) .collect(Collectors.toList()); 现在,据我所知,这确实可以实现预期的目的。它; 取得帐户清单 尝试登录每个帐户 过滤掉所有未登录的帐户 将已登录的帐户收集到新列表中 这样做的缺点是什么?有什么我不应该继续的理由吗?最后,如果不是这种解决方案,那又如何呢? 它的原始版本使用.filter()方法,如下所示; .filter(account -&gt; { account.login(); return account.loggedIn(); })
137 java  java-8  java-stream  peek 

2
如何设置IntelliJ IDEA项目SDK
我刚刚安装了IntelliJ IDEA,当我尝试创建我的第一个Project时,它要求我设置Project SDK。当我单击“ JDK”时,它要求我选择JDK的主目录,如下图所示。 我在找到它的位置时遇到了麻烦。

6
如何判断是否已安装JRE或JDK
我有一台故意安装了JDK的计算机。我有一台装有JRE的计算机,用于进行测试。但是,当我在这台计算机上运行一个Java应用程序,然后在另一台计算机上对其进行尝试时,它抱怨说需要JDK。如何检查系统是否以某种方式安装了JDK?注意:相关计算机为Mac。
134 java  macos  java-8 

1
如何使用Java 8 Stream从某些类属性获取列表?
我有一个List&lt;Person&gt;。我需要List从的属性获得Person。 例如,我有一个Person课: class Person { private String name; private String birthDate; public String getName() { return name; } public String getBirthDate() { return birthDate; } Person(String name) { this.name = name; } } List&lt;Person&gt; personList = new ArrayList&lt;&gt;(); personList.add(new Person("David")); personList.add(new Person("Joe")); personList.add(new Person("Michel")); personList.add(new Person("Barak")); 我想使用StreamAPI 获取名称列表,如下所示: List&lt;String&gt; names …



5
使用Maven时如何解决更严格的Java 8 Javadoc
您很快就会意识到,就Javadoc而言,JDK8更为严格(默认情况下)。(链接 -参见最后一个要点) 如果您从不生成任何Javadoc,那么您当然不会遇到任何问题,但是Maven发布过程之类的内容以及您的CI构建可能会突然失败,因为它们在JDK7上可以正常使用。现在,任何检查Javadoc工具的退出值的操作都将失败。warnings与JDK7相比,JDK8 Javadoc可能也更冗长,但这不是这里的范围。我们正在谈论errors! 存在此问题是为了收集有关如何处理的建议。最好的方法是什么?这些错误是否应该在源代码文件中一劳永逸地解决?如果您有庞大的代码库,则可能需要做很多工作。还有哪些其他选择? 也欢迎您评论以前失败的失败案例。 现在失败的恐怖故事 wsimport工具 wsimport工具是用于创建Web服务使用者的代码生成器。它包含在JDK中。即使您使用wsimportJDK8中的工具,它仍然会产生无法使用JDK8中的javadoc编译器进行编译的源代码。 @author标签 我正在打开3-4岁的源代码文件,并看到以下内容: /** * My very best class * @author John &lt;john.doe@mine.com&gt; */ 现在由于&lt;字符而失败。严格来说,这是合理的,但不是很宽容。 HTML表格 您的Javadoc中的HTML表?考虑以下有效的HTML: /** * * &lt;table&gt; * &lt;tr&gt; * &lt;td&gt;Col1&lt;/td&gt;&lt;td&gt;Col2&lt;/td&gt;&lt;td&gt;Col3&lt;/td&gt; * &lt;/tr&gt; * &lt;/table&gt; */ 现在,此操作将失败,并显示错误消息no summary or caption for table。一种快速的解决方法是这样做: /** * * &lt;table summary=""&gt; * …
133 java  maven  java-8 

5
在Java中,流比循环有什么优势?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 面试中有人问我这个问题,但我不相信我给出了我能提供的最佳答案。我提到您可以进行并行搜索,并且空值是通过某种我不记得的方式处理的。现在,我意识到我在考虑选修课。我在这里想念什么?他们声称这是更好或更简洁的代码,但我不确定我是否同意。 考虑到答案的简洁程度,看来这毕竟不是一个太宽泛的问题。 如果他们在面试中提出这个问题,而且很明显,将其分解除了能使找到答案变得更加困难之外,还有什么目的?我的意思是,你在找什么?我可以分解问题,让所有子问题都得到回答,但是然后创建一个带有所有子问题链接的父问题……虽然看起来很愚蠢。在讨论过程中,请举例说明一个不太广泛的问题。我不知道只问这个问题的一部分,仍然会得到有意义的答案。我可以用不同的方式问同样的问题。例如,我可以问“流的作用是什么?” 或“何时使用流而不是for循环?” 或“为什么要麻烦流而不是for循环?” 这些都是完全相同的问题。 ...还是因为有人给出了很长的多点答案而被认为过于宽泛?坦率地说,任何有知识的人都可以解决任何问题。例如,如果您碰巧是JVM的作者之一,那么您可能可能整天都在谈论for循环,而我们大多数人却不能。 “请编辑问题以将其限制在一个特定的问题上,并要有足够的细节来确定适当的答案。避免一次提出多个不同的问题。请参阅“如何提出问题”页面,以帮助您弄清这个问题。” 如下所述,已经给出了足够的答案,证明存在一个答案,并且很容易提供。

1
Java中的“ SAM类型”是什么?
在阅读Java-8规范后,我不断看到对“ SAM类型”的引用。我还没有找到关于这是什么的明确解释。 什么是SAM类型?什么时候可以使用的示例场景是什么?
133 java  lambda  java-8 

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.