Questions tagged «java-8»

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

10
如何获取Java 8方法参考的MethodInfo?
请看下面的代码: Method methodInfo = MyClass.class.getMethod("myMethod"); 此方法有效,但是方法名称作为字符串传递,因此即使myMethod不存在,也可以编译。 另一方面,Java 8引入了方法引用功能。在编译时检查它。可以使用此功能获取方法信息吗? printMethodName(MyClass::myMethod); 完整示例: @FunctionalInterface private interface Action { void invoke(); } private static class MyClass { public static void myMethod() { } } private static void printMethodName(Action action) { } public static void main(String[] args) throws NoSuchMethodException { // This works, but method …

7
为什么flatMap()之后的filter()在Java流中不是“完全”惰性的?
我有以下示例代码: System.out.println( "Result: " + Stream.of(1, 2, 3) .filter(i -> { System.out.println(i); return true; }) .findFirst() .get() ); System.out.println("-----------"); System.out.println( "Result: " + Stream.of(1, 2, 3) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .filter(i -> { System.out.println(i); return true; …

2
Java流toArray()转换为特定类型的数组
也许这很简单,但实际上我对Java 8功能并不了解,并且不知道如何实现。我有一条包含以下文本的简单行: “密钥,名称” 并且我想将该行转换为String数组,并用逗号(,)分隔每个值,但是,我还想在返回最后一个数组之前修剪每个字段,所以我做了以下工作: Arrays.stream(line.split(",")).map(String::trim).toArray(); 但是,这将返回Object []数组而不是String []数组。经过进一步检查,我可以确认内容实际上是String实例,但是数组本身是Object元素。让我说明一下,这就是调试器对返回对象的说明: Object[]: 0 = (String) "Key" 1 = (String) "Name" 据我所知,问题在于映射调用的返回类型,但是如何使它返回String []数组呢?

5
如何将Java枚举转换为流?
我有一个第三方图书馆给我一个图书馆Enumeration<String>。我想像Java 8那样懒惰地使用该枚举,并Stream调用诸如此类的东西。filtermapflatMap 有没有现成的图书馆?我已经在引用Guava和Apache Commons,所以如果它们中的任何一个都有理想的解决方案。 另外,在保留所有内容的懒惰性质的同时将Enumerationa变成最佳/最简单的方法Stream是什么?


9
从List <Future>到Future <List>序列
我正在尝试转换List&lt;CompletableFuture&lt;X&gt;&gt;为CompletableFuture&lt;List&lt;T&gt;&gt;。当您有许多异步任务并且需要获得所有异步任务的结果时,这非常有用。 如果它们中的任何一个失败,那么最终的未来将失败。这就是我实现的方式: public static &lt;T&gt; CompletableFuture&lt;List&lt;T&gt;&gt; sequence2(List&lt;CompletableFuture&lt;T&gt;&gt; com, ExecutorService exec) { if(com.isEmpty()){ throw new IllegalArgumentException(); } Stream&lt;? extends CompletableFuture&lt;T&gt;&gt; stream = com.stream(); CompletableFuture&lt;List&lt;T&gt;&gt; init = CompletableFuture.completedFuture(new ArrayList&lt;T&gt;()); return stream.reduce(init, (ls, fut) -&gt; ls.thenComposeAsync(x -&gt; fut.thenApplyAsync(y -&gt; { x.add(y); return x; },exec),exec), (a, b) -&gt; a.thenCombineAsync(b,(ls1,ls2)-&gt; { ls1.addAll(ls2); return ls1; },exec)); …


2
使用Lambda的Java 8过滤器数组
我有一个double[],我想在一行中过滤掉负值(不创建新数组)而不添加for循环。使用Java 8 Lambda表达式是否可能? 在python中,将使用生成器: [i for i in x if i &gt; 0] 是否可以在Java 8中做类似的简洁操作?
74 java  lambda  java-8 

10
如何反编译为Java文件intellij的想法
IDEA具有强大的内置功能-反编译器。它可以很好地工作。我可以复制源代码,但是找不到将所有反编译的Java类提取到Java文件的选项。 这个项目有很多Java类和程序包,所以我很想手动复制它。 有谁知道如何提取到Java源文件。谢谢

4
反转Java 8中的比较器
我有一个ArrayList并想按降序对其进行排序。我用它的java.util.stream.Stream.sorted(Comparator)方法。这是根据Java API的描述: 返回由该流的元素组成的流,并根据提供的进行排序Comparator。 这种方法给我一种升序排序。我应该更改哪个参数,以使其具有降序顺序?

6
是否有可用于任何lambda的no-op(NOP)的方法参考?
这听起来像是一个奇怪的问题,但是有一种方法可以引用Java 8中Lambda的标准no-op(aka空操作,空模式方法,无操作,无操作方法)方法。 目前,我有一个方法,需要一个,void foo(Consumer&lt;Object&gt;)并且想要不执行任何操作,我必须声明: foo(new Consumer&lt;Object&gt;() { public void accept(Object o) { // do nothing } } 我希望能够执行以下操作: foo(Object::null) 代替。是否存在类似的东西? 不确定如何使用多参数方法-也许这是Java中lambda的缺陷。

2
Lambda Java参考
我想将转换anonymous class为lambda expression。但是这个匿名类我使用this关键字。 例如,我写了这个简单的Observer/Observable模式: import java.util.ArrayList; import java.util.Collection; public static class Observable { private final Collection&lt;Observer&gt; notifiables = new ArrayList&lt;&gt;(); public Observable() { } public void addObserver(Observer notifiable) { notifiables.add(notifiable); } public void removeObserver(Observer notifiable) { notifiables.add(notifiable); } public void change() { notifiables.forEach(notifiable -&gt; notifiable.changed(this)); } } public interface Observer …
73 java  lambda  java-8 

7
Java 8中“功能接口”的精确定义
最近,我开始探索Java 8,但我不太了解Java的lambda表达式实现所必需的“功能接口”的概念。Java中有关于lambda函数的相当全面的指南,但是我陷入了为功能接口的概念定义的章节中。定义如下: 更准确地说,功能接口定义为具有一种抽象方法的任何接口。 然后他继续进行示例,其中一个是Comparator接口: public interface Comparator&lt;T&gt; { int compare(T o1, T o2); boolean equals(Object obj); } 我能够测试是否可以使用lambda函数代替Comparator参数,并且它可以工作(即Collections.sort(list, (a, b) -&gt; a-b))。 但是在Comparator界面中,compare和equals方法都是抽象的,这意味着它具有两个抽象方法。那么,如果定义要求一个接口仅具有一个抽象方法,那么这将如何工作?我在这里想念什么?

5
Java8 Lambda和异常
我想知道是否有人可以向我解释以下怪异现象。我正在使用Java 8 Update 11。 给定这种方法 private &lt;F,T&gt; T runFun(Function&lt;Optional&lt;F&gt;, T&gt; fun, Optional&lt;F&gt; opt) { return fun.apply(opt) ; } 如果我首先构造一个函数Object,并将其传递给上面的方法,那么事情就会编译。 private void doesCompile() { Function&lt;Optional&lt;String&gt;, String&gt; fun = o -&gt; o.orElseThrow(() -&gt; new RuntimeException("nah")); runFun(fun, Optional.of("foo")); } 但是,如果我以lambda形式内联函数,则编译器会说 未报告的异常X; 必须被抓住或宣布被抛出 private void doesNotCompile () { runFun(o -&gt; o.orElseThrow(() -&gt; new RuntimeException("nah")), …
73 java  lambda  java-8 

2
Java 8和Java 9中的Stream.peek()方法
我正在学习Java 8 lambda表达式,并且想问一下下面的Java代码,这些代码与peek我遇到的函数接口中的方法有关。 在IDE上执行程序时,它不提供任何输出。我期望它会给2, 4, 6。 import java.util.Arrays; import java.util.List; public class Test_Q3 { public Test_Q3() { } public static void main(String[] args) { List&lt;Integer&gt; values = Arrays.asList(1, 2, 3); values.stream() .map(n -&gt; n * 2) .peek(System.out::print) .count(); } }
73 java  lambda  java-8  java-9  peek 

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.