Questions tagged «java-8»

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

7
将Instant格式化为String
我正在尝试使用新的Java 8 time-api和模式将Instant格式化为String: Instant instant = ...; String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant); 使用上面的代码,我得到一个异常,该异常抱怨一个不受支持的字段: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra at java.time.Instant.getLong(Instant.java:608) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) ...

6
如何在很长的毫秒时间内创建Java 8 LocalDate?
我有一个外部API,它以longs为单位返回日期,表示自大纪元开始以来的毫秒数。 使用旧式Java API,我可以简单地Date使用 Date myDate = new Date(startDateLong) Java 8的LocalDate/ LocalDateTime类中的等效项是什么? 我感兴趣的所代表的时间点转换long到LocalDate我目前的本地时区。

5
Java 8流的.min()和.max():为什么要编译?
注意:这个问题来自于以前的SO问题的无效链接,但是这里... 参见下面的代码(注意:我确实知道该代码不会“起作用”,Integer::compare应该使用-我只是从链接的问题中提取了它): final ArrayList <Integer> list = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList()); System.out.println(list.stream().max(Integer::max).get()); System.out.println(list.stream().min(Integer::min).get()); 据javadoc的.min()和.max(),两者的参数应该是一个Comparator。然而,这里的方法引用是针对Integer该类的静态方法的。 那么,为什么要编译呢?
215 java  java-8  java-stream 

9
为什么要使用Objects.requireNonNull()?
我注意到,Oracle JDK中使用了许多Java 8方法,如果给定的对象(参数)为,则会在Objects.requireNonNull()内部抛出NullPointerException该方法null。 public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } 但是NullPointerException,如果null取消引用对象,则无论如何都会抛出该异常。那么,为什么要做这个额外的null检查并抛出 NullPointerException呢? 一个明显的答案(或好处)是它使代码更具可读性,我同意。我很想知道Objects.requireNonNull()在方法开始时使用的其他原因 。

2
Java 8接口方法中不允许“同步”的原因是什么?
在Java 8中,我可以轻松地编写: interface Interface1 { default void method1() { synchronized (this) { // Something } } static void method2() { synchronized (Interface1.class) { // Something } } } 我将获得在类中也可以使用的完整同步语义。但是,我不能synchronized在方法声明上使用修饰符: interface Interface2 { default synchronized void method1() { // ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here } static synchronized void method2() { …

9
Java8:使用Stream / Map-Reduce / Collector将HashMap <X,Y>转换为HashMap <X,Z>
我知道如何List从Y-&gt; “转换”一个简单的Java Z,即: List&lt;String&gt; x; List&lt;Integer&gt; y = x.stream() .map(s -&gt; Integer.parseInt(s)) .collect(Collectors.toList()); 现在,我想对地图进行基本相同的操作,即: INPUT: { "key1" -&gt; "41", // "41" and "42" "key2" -&gt; "42 // are Strings } OUTPUT: { "key1" -&gt; 41, // 41 and 42 "key2" -&gt; 42 // are Integers } 解决方案不应限于String-&gt; Integer。就像List上面的示例一样,我想调用任何方法(或构造函数)。

13
使用Java 8将对象列表转换为从toString()方法获得的字符串
Java 8中有很多有用的新事物。例如,我可以在对象列表上使用流进行迭代,然后对Object实例的特定字段中的值求和。例如 public class AClass { private int value; public int getValue() { return value; } } Integer sum = list.stream().mapToInt(AClass::getValue).sum(); 因此,我问是否有任何方法可以构建一个String将toString()一行实例中的方法输出连接在一起的方法。 List&lt;Integer&gt; list = ... String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class 假设list包含整数1,2并且3,我希望concatenated是"123"或"1,2,3"。

8
Optional.orElse()和Optional.orElseGet()之间的区别
我试图了解Optional&lt;T&gt;.orElse()和Optional&lt;T&gt;.orElseGet()方法之间的区别。 该orElse()方法的描述是“如果存在,则返回该值,否则返回其他”。 同时,对该orElseGet()方法的描述是“返回值(如果存在),否则调用其他值并返回该调用的结果”。 该orElseGet()方法采用Supplier功能接口,该接口基本上不接受任何参数并返回T。 您需要在哪种情况下使用orElseGet()?如果您有方法,T myDefault()为什么不做optional.orElse(myDefault())而不是做optional.orElseGet(() -&gt; myDefault())呢? 似乎没有orElseGet()将lambda表达式的执行推迟到以后的某个时间执行,那么这有什么意义呢?(我本来以为这将是更有益的,如果它回到一个更安全的Optional&lt;T&gt;,其get()不会抛出一个NoSuchElementException和isPresent()始终返回true ...但显然它不是,它只是返回T像orElse())。 我还有其他区别吗?
206 java  java-8  optional 

23
Java“此语言级别不支持lambda表达式”
我的Java 8的一些新功能和复制的例子测试伸到我的IDE(Eclipse的原话的IntelliJ)如图所示这里 Eclipse不提供对lambda表达式的任何支持,并且IntelliJ不断报告错误 此语言级别不支持Lambda表达式 我想知道我的安装,代码或支持是否存在问题。

4
Java 8流和对数组的操作
我刚刚发现了新的Java 8流功能。来自Python,我想知道现在是否有一种巧妙的方法可以对数组进行操作,例如求和,以“单行pythonic”的方式将两个数组相乘? 谢谢


2
CompletableFuture,Future和RxJava的Observable之间的区别
我想知道的区别 CompletableFuture,Future和Observable RxJava。 我所知道的都是异步的,但是 Future.get() 阻塞线程 CompletableFuture 提供回调方法 RxJava Observable--- CompletableFuture与其他好处相似(不确定) 例如:如果客户端需要进行多个服务调用,并且当我们使用Futures(Java)时Future.get()将依次执行...希望了解它在RxJava中的效果如何。 并且文档http://reactivex.io/intro.html说 使用Future来最佳地组合条件异步执行流是困难的(或者是不可能的,因为每个请求的延迟在运行时会有所不同)。当然可以这样做,但是很快就会变得复杂(因此容易出错),或者过早地在Future.get()上阻塞,这消除了异步执行的好处。 真的很想知道如何RxJava解决这个问题。我发现很难从文档中了解。

8
Java 8-转换列表的最佳方法:map或foreach?
我有一个列表myListToParse,我想在其中过滤元素并在每个元素上应用方法,然后将结果添加到另一个列表中myFinalList。 使用Java 8,我注意到可以用2种不同的方式来做到这一点。我想知道它们之间更有效的方法,并理解为什么一种方法比另一种更好。 我愿意就第三种方式提出任何建议。 方法1: myFinalList = new ArrayList&lt;&gt;(); myListToParse.stream() .filter(elt -&gt; elt != null) .forEach(elt -&gt; myFinalList.add(doSomething(elt))); 方法2: myFinalList = myListToParse.stream() .filter(elt -&gt; elt != null) .map(elt -&gt; doSomething(elt)) .collect(Collectors.toList());
188 java  java-8  java-stream 

19
通过谓词限制流
是否存在Java 8流操作来限制(可能是无限的)Stream直到第一个元素与谓词不匹配? 在Java 9中,我们可以使用takeWhile下面的示例来打印所有小于10的数字。 IntStream .iterate(1, n -&gt; n + 1) .takeWhile(n -&gt; n &lt; 10) .forEach(System.out::println); 由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么?
187 java  java-8  java-stream 

9
Java 8 Lambda Void参数
假设我在Java 8中具有以下功能接口: interface Action&lt;T, U&gt; { U execute(T t); } 在某些情况下,我需要没有参数或返回类型的操作。所以我写这样的东西: Action&lt;Void, Void&gt; a = () -&gt; { System.out.println("Do nothing!"); }; 但是,它给了我编译错误,我需要写成 Action&lt;Void, Void&gt; a = (Void v) -&gt; { System.out.println("Do nothing!"); return null;}; 这很丑。有什么方法可以摆脱Void类型参数?
187 java  lambda  java-8  void 

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.