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

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

4
ทำไมต้องใช้ combiner ในการลดเมธอดที่แปลง type ใน java 8
ฉันมีปัญหาในการทำความเข้าใจบทบาทที่combinerเติมเต็มใน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); ฉันเข้าใจว่ามีการใช้วิธี combiner ในลำธารขนาน - ดังนั้นในตัวอย่างของฉันมันได้รวมเข้าด้วยกันสอง ints สะสมกลาง แต่ฉันไม่เข้าใจว่าทำไมตัวอย่างแรกไม่คอมไพล์โดยไม่มี combiner หรือวิธีที่ combiner …
142 java  java-8  java-stream 

6
ในสตรีม Java มองเฉพาะสำหรับการดีบักเท่านั้น?
ฉันกำลังอ่านข้อมูลเกี่ยวกับสตรีม Java และค้นพบสิ่งใหม่ ๆ ในขณะที่ดำเนินการไป หนึ่งในสิ่งใหม่ที่ฉันพบคือpeek()ฟังก์ชัน เกือบทุกอย่างที่ฉันอ่านใน peek บอกว่าควรใช้เพื่อดีบักสตรีมของคุณ จะเกิดอะไรขึ้นถ้าฉันมีสตรีมที่แต่ละบัญชีมีชื่อผู้ใช้ฟิลด์รหัสผ่านและวิธีการเข้าสู่ระบบ () และ loggedIn () ฉันยังมี Consumer<Account> login = account -> account.login(); และ Predicate<Account> loggedIn = account -> account.loggedIn(); ทำไมต้องแย่ขนาดนี้ List<Account> accounts; //assume it's been setup List<Account> loggedInAccount = accounts.stream() .peek(login) .filter(loggedIn) .collect(Collectors.toList()); เท่าที่ฉันสามารถบอกได้ว่าสิ่งนี้ทำในสิ่งที่ตั้งใจจะทำ มัน; รับรายการบัญชี พยายามเข้าสู่ระบบแต่ละบัญชี กรองบัญชีใด ๆ ที่ไม่ได้เข้าสู่ระบบ รวบรวมบัญชีที่เข้าสู่ระบบไว้ในรายการใหม่ …
141 java  java-8  java-stream  peek 

4
Java 8: ประสิทธิภาพของ Streams vs Collections
ฉันยังใหม่กับ Java 8 ฉันยังไม่รู้ API ในเชิงลึก แต่ฉันได้ทำเกณฑ์มาตรฐานอย่างไม่เป็นทางการเพื่อเปรียบเทียบประสิทธิภาพของ Streams API ใหม่กับคอลเลกชันเก่าที่ดี การทดสอบประกอบด้วยในการกรองรายการIntegerและจำนวนคู่แต่ละคำนวณรากและเก็บไว้ในผลของListDouble นี่คือรหัส: 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++) …

7
ใน Java 8 ฉันจะแปลง Map <K, V> เป็น Map <K, V> อื่นโดยใช้แลมบ์ดาได้อย่างไร?
ฉันเพิ่งเริ่มดู Java 8 และลอง lambdas ฉันคิดว่าฉันพยายามที่จะเขียนสิ่งที่ง่ายมากที่ฉันเขียนเมื่อเร็ว ๆ นี้ ฉันต้องเปลี่ยน Map of String to Column เป็น Map อื่นของ String to Column โดยที่ Column ใน Map ใหม่นั้นเป็นการป้องกันสำเนาของ Column ใน Map แรก คอลัมน์มีตัวสร้างสำเนา สิ่งที่ฉันได้ใกล้เคียงที่สุดคือ: 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 

5
Observer เลิกใช้งานใน Java 9 แล้วเราควรใช้อะไรแทน?
Java 9 ออกมาแล้วและObserverเลิกใช้งานแล้ว ทำไมถึงเป็นเช่นนั้น? หมายความว่าเราไม่ควรใช้รูปแบบผู้สังเกตการณ์อีกต่อไปหรือไม่? มันจะดีถ้ารู้ว่าอะไรเป็นทางเลือกที่ดีกว่า?

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

2
วิธีตั้งค่า IntelliJ IDEA Project SDK
ฉันเพิ่งติดตั้ง IntelliJ IDEA และเมื่อฉันพยายามสร้างโครงการแรกของฉันมันขอให้ฉันตั้งค่า Project SDK เมื่อฉันคลิกที่ "JDK" ระบบจะขอให้ฉันเลือกโฮมไดเร็กทอรีของ JDK ดังที่แสดงในภาพนี้ ฉันมีปัญหาในการค้นหาว่าอยู่ที่ไหน

6
ทางเลือก orElse ทางเลือกใน Java
ฉันได้ทำงานกับประเภทตัวเลือกใหม่ใน Java 8และฉันได้พบกับสิ่งที่ดูเหมือนเป็นการดำเนินการทั่วไปที่ไม่รองรับฟังก์ชัน: an "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(); } ฉันอยากรู้ว่ามีเหตุผลที่วิธีการดังกล่าวไม่มีอยู่จริงหรือไม่ถ้าฉันแค่ใช้ตัวเลือกเสริมโดยไม่ได้ตั้งใจและวิธีอื่น …
138 java  lambda  java-8  optional  java-9 

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; …

6
ฉันจะสร้างสตรีมจากอาร์เรย์ได้อย่างไร
เมื่อใดก็ตามที่ฉันต้องการสร้างสตรีมจากอาร์เรย์ฉันจะทำ String[] array = {"x1", "x2"}; Arrays.asList(array).stream(); มีวิธีโดยตรงในการสร้างสตรีมจากอาร์เรย์หรือไม่?

6
จะทราบได้อย่างไรว่าติดตั้ง JRE หรือ JDK แล้ว
ฉันมีคอมพิวเตอร์เครื่องหนึ่งที่ตั้งใจติดตั้ง JDK ฉันมีคอมพิวเตอร์เครื่องอื่นที่มี JRE สำหรับการทดสอบอื่น ๆ อย่างไรก็ตามเมื่อฉันได้รับแอปพลิเคชัน java ที่ทำงานบนคอมพิวเตอร์เครื่องนี้แล้วลองใช้กับเครื่องอื่นมันบ่นว่าจำเป็นต้องใช้ JDK ฉันจะตรวจสอบได้อย่างไรว่ามีการติดตั้ง JDK ในระบบของฉันหรือไม่? หมายเหตุ: คอมพิวเตอร์ที่เป็นปัญหาคือ Mac
134 java  macos  java-8 

5
ใน Java อะไรคือข้อดีของการสตรีมผ่านลูป? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันถูกถามในการสัมภาษณ์และฉันไม่มั่นใจว่าฉันได้รับคำตอบที่ดีที่สุด ฉันบอกว่าคุณสามารถทำการค้นหาแบบขนานและค่าว่างนั้นถูกจัดการโดยวิธีการบางอย่างที่ฉันจำไม่ได้ ตอนนี้ฉันรู้ว่าฉันกำลังคิดเกี่ยวกับตัวเลือก ฉันหายไปนี่อะไร พวกเขาอ้างว่าเป็นรหัสที่ดีกว่าหรือกระชับกว่า แต่ฉันไม่แน่ใจว่าฉันเห็นด้วยหรือไม่ เมื่อพิจารณาถึงคำตอบที่รัดกุมดูเหมือนว่านี่ไม่ใช่คำถามที่กว้างเกินไป หากพวกเขาถามคำถามนี้ในการสัมภาษณ์และชัดเจนว่าพวกเขามีจุดประสงค์อะไรที่จะทำลายมันได้นอกจากการหาคำตอบให้ได้ยากขึ้น ฉันหมายถึงคุณกำลังมองหาอะไร ฉันสามารถแยกย่อยคำถามและให้ตอบคำถามย่อยทั้งหมด แต่สร้างคำถามหลักพร้อมลิงก์ไปยังคำถามย่อยทั้งหมด ... ดูเหมือนว่างี่เง่า ในขณะที่เราอยู่ที่นี่โปรดยกตัวอย่างคำถามที่กว้างกว่าให้ฉัน ฉันไม่รู้จะถามเพียงบางส่วนของคำถามนี้และยังได้รับคำตอบที่มีความหมาย ฉันสามารถถามคำถามเดียวกันในวิธีที่แตกต่างกัน ตัวอย่างเช่นฉันอาจถามว่า "บริการสตรีมวัตถุประสงค์อะไร" หรือ "ฉันจะใช้สตรีมแทนการวนซ้ำเมื่อใด" หรือ "ทำไมต้องกังวลกับกระแสแทนที่จะเป็นลูป" นี่เป็นคำถามเดียวกันทั้งหมด ... หรือว่ากว้างเกินไปเพราะมีคนให้คำตอบแบบหลายจุดยาวจริง ๆ ? ตรงไปตรงมาทุกคนในรู้สามารถทำได้ด้วยคำถามใด ๆ ตัวอย่างเช่นถ้าคุณเป็นหนึ่งในผู้เขียน JVM คุณอาจพูดถึงลูปได้ทั้งวันเมื่อพวกเราส่วนใหญ่ทำไม่ได้ "โปรดแก้ไขคำถามเพื่อ จำกัด ให้เป็นปัญหาเฉพาะที่มีรายละเอียดเพียงพอที่จะระบุคำตอบที่เพียงพอหลีกเลี่ยงการถามคำถามที่แตกต่างกันในคราวเดียวดูหน้าวิธีถามเพื่อขอความช่วยเหลือในการชี้แจงคำถามนี้" ดังที่ระบุไว้ด้านล่างคำตอบที่เพียงพอได้รับซึ่งพิสูจน์ว่ามีหนึ่งและมันเป็นเรื่องง่ายพอที่จะให้

5
วิธีแก้ปัญหา Java 8 Javadoc ที่เข้มงวดขึ้นเมื่อใช้ Maven
คุณจะรู้ได้อย่างรวดเร็วว่า JDK8 นั้นเข้มงวดกว่ามาก (โดยค่าเริ่มต้น) เมื่อพูดถึง Javadoc ( ลิงค์ - ดูหัวข้อย่อยสุดท้าย) หากคุณไม่เคยสร้าง Javadoc ใด ๆ เลยแน่นอนว่าคุณจะไม่ประสบปัญหาใด ๆ แต่สิ่งต่างๆเช่นกระบวนการเผยแพร่ Maven และการสร้าง CI ของคุณอาจล้มเหลวในทันทีที่พวกเขาทำงานได้ดีกับ JDK7 ทุกสิ่งที่ตรวจสอบค่าออกของเครื่องมือ Javadoc จะล้มเหลวในขณะนี้ JDK8 Javadoc น่าจะเป็น verbose มากกว่าwarningsเมื่อเทียบกับ JDK7 แต่นั่นไม่ใช่ขอบเขตที่นี่ เรากำลังพูดถึงerrors! คำถามนี้มีขึ้นเพื่อรวบรวมข้อเสนอเกี่ยวกับสิ่งที่ต้องทำ แนวทางที่ดีที่สุดคืออะไร? ข้อผิดพลาดเหล่านี้ควรได้รับการแก้ไขเพียงครั้งเดียวในไฟล์ซอร์สโค้ดหรือไม่ หากคุณมีฐานรหัสขนาดใหญ่สิ่งนี้อาจใช้งานได้มาก มีตัวเลือกอะไรอีกบ้าง? นอกจากนี้คุณยังสามารถแสดงความคิดเห็นเกี่ยวกับสิ่งที่ล้มเหลวซึ่งก่อนหน้านี้จะผ่านไปได้ เรื่องราวสยองขวัญของสิ่งที่ล้มเหลวในตอนนี้ wsimport เครื่องมือ wsimportเครื่องมือเป็นตัวสร้างโค้ดสำหรับสร้างผู้ใช้บริการเว็บ รวมอยู่ใน JDK แม้ว่าคุณจะใช้wsimportเครื่องมือจาก JDK8 แต่อย่างไรก็ตามมันจะผลิตรหัสที่มาที่ไม่สามารถรวบรวมกับคอมไพเลอร์ Javadoc จาก …
133 java  maven  java-8 

1
'SAM type' ใน Java คืออะไร?
เมื่ออ่านข้อมูลจำเพาะ Java-8 ฉันมักจะเห็นการอ้างอิงถึง 'ประเภท SAM' ฉันยังไม่สามารถหาคำอธิบายที่ชัดเจนได้ว่านี่คืออะไร ประเภท SAM คืออะไรและสถานการณ์ตัวอย่างของเวลาที่จะใช้คืออะไร?
133 java  lambda  java-8 

5
Java8: เหตุใดจึงห้ามไม่ให้กำหนดวิธีการเริ่มต้นสำหรับวิธีการจาก java.lang.Object
วิธีการเริ่มต้นเป็นเครื่องมือใหม่ที่ดีในกล่องเครื่องมือ Java ของเรา อย่างไรก็ตามฉันพยายามเขียนอินเทอร์เฟซที่กำหนดdefaultเวอร์ชันของtoStringวิธีการ Java บอกฉันว่าสิ่งนี้เป็นสิ่งต้องห้ามเนื่องจากวิธีการที่ประกาศไว้java.lang.Objectอาจไม่ได้รับการdefaultแก้ไข เหตุใดจึงเป็นเช่นนี้ ฉันรู้ว่ามีกฎ "คลาสฐานเสมอชนะ" ดังนั้นโดยค่าเริ่มต้น (pun;) defaultการใช้งานObjectเมธอดใด ๆจะถูกเขียนทับโดยวิธีการObjectต่อไป อย่างไรก็ตามฉันไม่เห็นเหตุผลว่าทำไมจึงไม่ควรมีข้อยกเว้นสำหรับวิธีการจากObjectในข้อมูลจำเพาะ โดยเฉพาะอย่างยิ่งสำหรับtoStringการใช้งานเริ่มต้นอาจมีประโยชน์มาก แล้วอะไรคือสาเหตุที่นักออกแบบ Java ตัดสินใจไม่อนุญาตให้ใช้defaultวิธีการแทนที่เมธอดจากObject?

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