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

ใช้แท็กนี้สำหรับคำถามเฉพาะสำหรับ Java 8 ซึ่งเป็นรุ่น 8 (หมายเลขภายใน 1.8) ของแพลตฟอร์ม Java ซึ่งเปิดตัวในวันที่ 18 มีนาคม 2014 ในกรณีส่วนใหญ่คุณควรระบุแท็ก 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
อะไรคือความแตกต่างระหว่างค้นหาทันใจกับ LocalDateTime
ฉันรู้แล้ว: การค้นหาทันใจเป็นเพียงการประทับเวลา "ทางเทคนิค" (นาโนวินาที) สำหรับการคำนวณ LocalDateTimeค่อนข้างแสดงวันที่ / นาฬิการวมถึงเขตเวลาสำหรับมนุษย์ ยังคงอยู่ในตอนท้าย IMO ทั้งสองสามารถใช้เป็นประเภทสำหรับกรณีการใช้งานส่วนใหญ่ ตัวอย่าง: ปัจจุบันฉันกำลังทำงานแบทช์ที่ฉันต้องการคำนวณการวิ่งครั้งต่อไปตามวันที่และฉันพยายามหาข้อดี / ข้อเสียระหว่างสองประเภทนี้ (นอกเหนือจากข้อได้เปรียบความแม่นยำระดับนาโนวินาทีของ Instant และส่วนของโซนเวลา ของ LocalDateTime) คุณสามารถตั้งชื่อตัวอย่างแอพพลิเคชั่นได้หรือไม่โดยควรใช้เฉพาะ Instant หรือ LocalDateTime แก้ไข: ระวังเอกสารที่อ่านผิดสำหรับ LocalDateTime เกี่ยวกับความแม่นยำและโซนเวลา
256 java  datetime  java-8 

13
คำนวณวันระหว่างสองวันใน Java 8
ฉันรู้ว่ามีคำถามมากมายเกี่ยวกับวิธีการรับ แต่ฉันต้องการและตัวอย่างโดยใช้ Java 8 Date API ใหม่ ฉันรู้จักห้องสมุด JodaTime ด้วย แต่ฉันต้องการวิธีการทำงานที่ไม่มีห้องสมุดภายนอก ฟังก์ชั่นต้องบ่นด้วยข้อ จำกัด เหล่านี้: ป้องกันข้อผิดพลาดจากการบันทึกวันที่ อินพุตเป็นวัตถุสองวันที่ (โดยไม่มีเวลาฉันรู้ว่าในช่วงเวลาท้องถิ่น แต่ฉันต้องทำกับอินสแตนซ์วันที่)

12
การลบ Java 8 JDK จาก Mac
ดังนั้นฉันจึงติดตั้งเบต้าของ JDK 8 เมื่อไม่นานมานี้เพื่อดูตัวอย่างบางส่วน ฉันคิดว่าแน่นอนตอนนี้มันง่ายที่จะเปลี่ยนระหว่างรุ่น ทำการพัฒนา Play ด้วย IntelliJ ด้วยเหตุผลบางอย่าง 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> ไม่ได้ให้วิธีการสตรีม () และ 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;เช่นคุณสามารถใช้ลูปเสริมสำหรับลูปถ้าคุณต้องการวนซ้ำ ( 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 …

3
Java 8 lambdas, Function.identity () หรือ t-> t
ถ้าเป็นเช่นนั้นStack Overflow จะถูกปล่อยออกมา : Лямбдыใน Java 8, чтолучшеиспользовать - Function.identity () или t-&gt; t? ฉันมีคำถามเกี่ยวกับการใช้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. …

12
การใช้ Java 8 เป็นตัวเลือกกับ Stream :: flatMap
เฟรมเวิร์ก Java 8 ใหม่และเพื่อน ๆ สร้างขึ้นมาเพื่อโค้ดจาวาที่รัดกุม แต่ฉันได้เจอกับสถานการณ์ที่เรียบง่ายซึ่งดูเหมือนจะยุ่งยาก พิจารณาและวิธีการList&lt;Thing&gt; things Optional&lt;Other&gt; resolve(Thing thing)ผมต้องการที่จะทำแผนที่Thingเพื่อOptional&lt;Other&gt;s Otherและได้รับเป็นครั้งแรก วิธีแก้ปัญหาที่ชัดเจนคือการใช้things.stream().flatMap(this::resolve).findFirst()แต่flatMapต้องการให้คุณส่งกระแสข้อมูลและOptionalไม่มีstream()วิธี (หรือเป็นCollectionหรือให้วิธีการแปลงเป็นหรือดูเป็นCollection) สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); แต่ดูเหมือนว่าจะยืดยาวไปมากสำหรับสิ่งที่ดูเหมือนว่าเป็นกรณีที่พบบ่อยมาก ใครมีความคิดที่ดีกว่า

5
เหตุใด Java Streams จึงปิดทันที
ซึ่งแตกต่างจาก C # IEnumerableที่ไพพ์ไลน์การประมวลผลสามารถดำเนินการได้หลายครั้งตามที่เราต้องการใน Java สตรีมสามารถ 'ซ้ำ' เพียงครั้งเดียว การเรียกใช้งานเทอร์มินัลใด ๆ จะปิดสตรีมทำให้ไม่สามารถใช้งานได้ 'คุณสมบัติ' นี้ใช้พลังงานจำนวนมาก ฉันคิดว่าเหตุผลนี้ไม่ใช่เทคนิค สิ่งที่ต้องพิจารณาในการออกแบบภายใต้ข้อ จำกัด ที่แปลกประหลาดนี้คืออะไร? แก้ไข: เพื่อแสดงสิ่งที่ฉันกำลังพูดถึงให้พิจารณาการนำไปใช้งาน Quick-Sort ใน C #: 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; …

4
Java 8 Streams: ตัวกรองหลายตัวเทียบกับเงื่อนไขที่ซับซ้อน
บางครั้งคุณต้องการกรอง a ที่Streamมีมากกว่าหนึ่งเงื่อนไข: 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คลาสJava 8 มีสองวิธีในการห่อค่าในตัวเลือก 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 และอยู่ข้างปลอดภัยตลอดเวลา?

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 + " - …

6
การอนุญาต PermGen ใน JDK 8
ฉันติดตั้ง 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 

23
ข้อผิดพลาดในการสร้างเว็บไคลเอ็นต์สำหรับบริการกับ JDK8
ฉันต้องการใช้บริการเว็บในโครงการของฉัน ฉันใช้ NetBeans ดังนั้นฉันคลิกขวาที่โครงการของฉันและพยายามเพิ่ม "Web Service Client" ใหม่ ครั้งสุดท้ายที่ฉันตรวจสอบนี่เป็นวิธีสร้างไคลเอนต์บริการเว็บ แต่มันส่งผลให้เกิด 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; หมายเลข: 52; คอลัมน์จำนวน: 88; schema_reference: ไม่สามารถอ่านเอกสารสคีมา ' xjc.xsd ' เนื่องจากไม่อนุญาตให้เข้าถึงไฟล์ 'เนื่องจากข้อ จำกัด ที่กำหนดโดยคุณสมบัติaccessExternalSchema แพลตฟอร์ม Java เริ่มต้นสำหรับ NetBeans คือ JDK8 (เวอร์ชันเป็นทางการของ Oracle) ดังนั้นเมื่อฉันเปลี่ยนไฟล์ netbeans.conf ของฉันและสร้าง JDK7 (จาก Oracle รวมถึง) เป็นค่าเริ่มต้นทุกอย่างทำงานได้ดี ดังนั้นฉันคิดว่าปัญหาอยู่ที่ JDK8 …

7
จัดรูปแบบทันทีเป็นสตริง
ฉันพยายามจัดรูปแบบสตริงเป็นสตริงโดยใช้ java 8 time-api ใหม่และรูปแบบ: 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) ...

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