คำถามติดแท็ก java-8

ใช้แท็กนี้สำหรับคำถามเฉพาะสำหรับ Java 8 ซึ่งเป็นรุ่น 8 (หมายเลขภายใน 1.8) ของแพลตฟอร์ม Java ซึ่งเปิดตัวในวันที่ 18 มีนาคม 2014 ในกรณีส่วนใหญ่คุณควรระบุแท็ก java ด้วย

6
ฉันจะสร้าง Java 8 LocalDate จากเวลาที่ยาวนานเป็นมิลลิวินาทีได้อย่างไร
ฉันมี API ภายนอกที่ให้วันที่ฉันเป็นlongs แสดงเป็นมิลลิวินาทีนับตั้งแต่เริ่มยุค ด้วย Java API แบบเก่าฉันก็แค่สร้างDateจากมันด้วย Date myDate = new Date(startDateLong) อะไรคือสิ่งที่เทียบเท่าใน Java 8's LocalDate/ LocalDateTimeคลาส? ฉันสนใจที่จะแปลงเวลาlongให้เป็น a LocalDateในเขตเวลาปัจจุบันของฉัน

5
สตรีม. min () และ .max () ของ Java 8: ทำไมคอมไพล์นี้
หมายเหตุ: คำถามนี้มาจากลิงก์ตายซึ่งเป็นคำถาม 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 

10
ทำไมหนึ่งควรใช้ Objects.requireNonNull ()
ผมได้ตั้งข้อสังเกตว่าหลาย Java 8 วิธีใน Oracle JDK การใช้งานObjects.requireNonNull()ซึ่งภายในพ่นNullPointerExceptionถ้าวัตถุที่กำหนด (อาร์กิวเมนต์) nullเป็น public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } แต่NullPointerExceptionจะถูกโยนทิ้งหาก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 …

9
Java8: HashMap <X, Y> ถึง HashMap <X, Z> โดยใช้ Stream / Map-Reduce / Collector
ฉันรู้วิธีการ "แปลง" Java ง่ายๆListจากY-&gt; 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 } การแก้ปัญหาไม่ควรจะ จำกัด-&gt;String …

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()วิธีการใช้อินเตอร์เฟซที่ใช้งานได้ผู้ผลิตซึ่งเป็นหลักไม่ใช้พารามิเตอร์ใด ๆ Tและผลตอบแทน คุณจะต้องใช้ในสถานการณ์orElseGet()ใด หากคุณมีวิธีการที่T myDefault()ทำไมคุณจะไม่เพียงแค่ทำoptional.orElse(myDefault())มากกว่าoptional.orElseGet(() -&gt; myDefault())? ดูเหมือนจะไม่orElseGet()เป็นการเลื่อนการดำเนินการของแลมบ์ดาไปในภายหลังหรือบางสิ่งบางอย่างดังนั้นประเด็นของมันคืออะไร? (ฉันคิดว่ามันจะมีประโยชน์มากขึ้นถ้ามันคืนความปลอดภัยOptional&lt;T&gt;ที่get()ไม่เคยขว้าง a NoSuchElementExceptionและisPresent()กลับมาจริงเสมอ ... แต่เห็นได้ชัดว่าไม่ใช่มันแค่คืนTเหมือนorElse()) มีความแตกต่างอื่น ๆ ที่ฉันหายไปหรือไม่?
206 java  java-8  optional 

23
Java“ นิพจน์แลมบ์ดาไม่รองรับในระดับภาษานี้”
ฉันกำลังทดสอบคุณสมบัติใหม่ของ Java 8 และคัดลอกตัวอย่างลงใน IDE ของฉัน (Eclipse เดิมแล้ว IntelliJ) ดังที่แสดงที่นี่ Eclipse ไม่ให้การสนับสนุนใด ๆ สำหรับการแสดงออกแลมบ์ดาและ IntelliJ ยังคงรายงานข้อผิดพลาด นิพจน์แลมบ์ดาไม่รองรับในระดับภาษานี้ ฉันต้องการทราบว่านี่เป็นปัญหากับการติดตั้งรหัสหรือการสนับสนุนของฉันหรือไม่

2
ทำไม String.chars () กระแสของ ints ใน Java 8
ใน Java 8 มีวิธีการใหม่String.chars()ที่ส่งกลับกระแสของints ( IntStream) ที่แสดงถึงรหัสตัวละคร ฉันเดาว่าหลายคนคงคาดหวังกระแสของcharที่นี่แทน อะไรคือแรงจูงใจในการออกแบบ API ด้วยวิธีนี้
198 java  string  java-8 

4
Java 8 สตรีมและการใช้งานบนอาร์เรย์
ฉันเพิ่งค้นพบความสามารถของสตรีม Java 8 ใหม่ มาจาก Python ฉันสงสัยว่าตอนนี้มีวิธีที่ประณีตในการดำเนินการกับอาเรย์เช่นการหาผลรวมการคูณสองอาร์เรย์ในรูปแบบ "one pythonic" หรือไม่? ขอบคุณ

2
ความแตกต่างระหว่างอนาคตที่สมบูรณ์ในอนาคตและ RxJava ที่สังเกตได้
ผมอยากจะทราบความแตกต่างระหว่าง CompletableFuture, และFutureObservable RxJava สิ่งที่ฉันรู้คือทั้งหมดนั้นไม่ตรงกัน แต่ Future.get() บล็อกเธรด CompletableFuture ให้วิธีการโทรกลับ RxJava Observable--- คล้ายCompletableFutureกับผลประโยชน์อื่น ๆ (ไม่แน่ใจ) ตัวอย่างเช่น: หากลูกค้าต้องการใช้บริการหลายสายและเมื่อเราใช้Futures(Java) Future.get()จะถูกดำเนินการตามลำดับ ... ต้องการทราบว่า RxJava ดีกว่าได้อย่างไร และเอกสารประกอบhttp://reactivex.io/intro.htmlกล่าว เป็นการยากที่จะใช้ฟิวเจอร์สในการเขียนขั้นตอนการดำเนินการแบบอะซิงโครนัสตามเงื่อนไขอย่างเหมาะสมที่สุด (หรือเป็นไปไม่ได้เนื่องจากเวลาแฝงของแต่ละคำขอแตกต่างกันที่รันไทม์) สามารถทำสิ่งนี้ได้ แต่มันจะซับซ้อนอย่างรวดเร็ว (และทำให้เกิดข้อผิดพลาดได้ง่าย) หรือบล็อกอยู่บน Future.get () ก่อนกำหนดซึ่งจะกำจัดข้อดีของการประมวลผลแบบอะซิงโครนัส สนใจจริงๆที่จะรู้วิธีRxJavaแก้ปัญหานี้ ฉันพบว่ามันยากที่จะเข้าใจจากเอกสาร

8
Java 8 - วิธีที่ดีที่สุดในการแปลงรายการ: แผนที่หรือ foreach?
ฉันมีรายการmyListToParseที่ฉันต้องการกรององค์ประกอบและใช้วิธีการในแต่ละองค์ประกอบและเพิ่มผลลัพธ์ในรายการอื่นmyFinalListที่ฉันต้องการกรององค์ประกอบและวิธีการใช้ในแต่ละองค์ประกอบและเพิ่มผลในรายการอื่น ด้วย Java 8 ฉันสังเกตเห็นว่าฉันสามารถทำได้สองวิธีที่แตกต่างกัน ฉันต้องการทราบวิธีที่มีประสิทธิภาพมากขึ้นระหว่างพวกเขาและเข้าใจว่าทำไมวิธีหนึ่งจึงดีกว่าอีกวิธีหนึ่ง ฉันเปิดรับข้อเสนอแนะเกี่ยวกับวิธีที่สาม วิธีที่ 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 

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พารามิเตอร์ประเภทหรือไม่
188 java  lambda  java-8  void 

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 SE 8 มีคู่หรือ Tuples หรือไม่
ฉันกำลังเล่นกับการทำงานที่ขี้เกียจใน Java SE 8 และฉันต้องการmapดัชนีiไปเป็นคู่ / tuple (i, value[i])จากนั้นfilterขึ้นอยู่กับvalue[i]องค์ประกอบที่สองและสุดท้ายก็ส่งออกดัชนี ฉันต้องยังคงประสบกับสิ่งนี้: อะไรคือสิ่งที่เทียบเท่าของ C ++ Pair &lt;L, R&gt; ใน Java? ในยุคใหม่ที่กล้าหาญของ lambdas และลำธาร? อัปเดต:ฉันนำเสนอตัวอย่างที่ค่อนข้างง่ายซึ่งมีโซลูชันที่นำเสนออย่างประณีตโดย @dkatzel ในหนึ่งในคำตอบด้านล่าง อย่างไรก็ตามมันไม่ได้พูดคุยกัน ดังนั้นให้ฉันเพิ่มตัวอย่างทั่วไปมากขึ้น: package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.