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

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

2
ลูกศร (->) ลำดับความสำคัญของผู้ประกอบการ / ลำดับความสำคัญต่ำสุดหรือลำดับความสำคัญของการมอบหมาย / การมอบหมายรวมมีค่าต่ำสุด?
JLS : ประกอบการต่ำสุดสำคัญคือลูกศรของนิพจน์แลมบ์ดา (->) , ตามโดยผู้ประกอบการที่ได้รับมอบหมาย ตามไปในทิศทางใด (เพิ่มความสำคัญลดลำดับความสำคัญ) - "ติดตาม" หมายถึงการมอบหมายมีลำดับความสำคัญสูงกว่าหรือมีลำดับความสำคัญต่ำกว่า (เกี่ยวข้องกับตัวดำเนินการลูกศร) ฉันเดาว่าเพิ่มมากขึ้นเพราะ "ต่ำสุด" (สำหรับลูกศร) หมายถึงต่ำที่สุดอย่างแน่นอน ดังที่ฉันเข้าใจแล้วลูกศร (->) ควรอยู่ที่ด้านล่างสุดของตารางตัวดำเนินการของพรินซ์ตัน (ซึ่งอยู่ต่ำกว่าตัวดำเนินการที่ได้รับมอบหมายทั้งหมด) ดังนั้นลูกศร (->) มีระดับความสำคัญ 0 (ศูนย์) (ตามตารางนั้น) ฉันถูกต้องในการทำความเข้าใจของฉัน? ExamTrayดูเหมือนจะบอกว่าลูกศรลำดับความสำคัญเป็นอย่างน้อยเช่นเดียวกับการมอบหมาย ... และชี้แจงว่าลูกศรสัมพันธ์เป็นซ้าย -> ถึง -> ขวา (ซึ่งแตกต่างจากการกำหนด) ฉันไม่พบใบเสนอราคาของ JLS สำหรับการเชื่อมโยงลูกศร ฉันมักจะคิดว่าลำดับความสำคัญของการมอบหมายนั้นต่ำที่สุดโดยมีเหตุผล

1

3
+0 และ -0 แสดงพฤติกรรมที่แตกต่างกันสำหรับข้อมูล int และข้อมูลลอย
ฉันได้อ่านโพสต์เชิงลบและเชิงบวกศูนย์ เพื่อความเข้าใจของฉันรหัสต่อไปนี้ควรให้true และtrue เป็นผลลัพธ์ อย่างไรก็ตามมันจะให้falseและtrueเป็นผลลัพธ์ ฉันกำลังเปรียบเทียบศูนย์ลบกับศูนย์บวก public class Test { public static void main(String[] args) { float f = 0; float f2 = -f; Float F = new Float(f); Float F1 = new Float(f2); System.out.println(F1.equals(F)); int i = 0; int i2 = -i; Integer I = new Integer(i); Integer I1 …
16 java  java-8 

5
วิธีสร้างแผนที่ด้วยค่าที่แตกต่างจากแผนที่ (และใช้ปุ่มขวาโดยใช้ BinaryOperator)
ฉันมีแผนที่Map<K, V>และเป้าหมายของฉันคือการลบค่าที่ซ้ำกันและเอาท์พุทโครงสร้างเดียวกันMap<K, V>อีกครั้ง ในกรณีที่พบค่าที่ซ้ำกันจะต้องมีการเลือกหนึ่งคีย์ ( k) จากสองคีย์ ( k1และk1) ที่เก็บค่าเหล่านี้ด้วยเหตุผลนี้ให้ถือว่ามีการBinaryOperator<K>ให้kจากk1และk2พร้อมใช้งาน ตัวอย่างอินพุตและเอาต์พุต: // Input Map<Integer, String> map = new HashMap<>(); map.put(1, "apple"); map.put(5, "apple"); map.put(4, "orange"); map.put(3, "apple"); map.put(2, "orange"); // Output: {5=apple, 4=orange} // the key is the largest possible ความพยายามของฉันใช้Stream::collect(Supplier, BiConsumer, BiConsumer)เป็นบิตเงอะงะมากและมีการดำเนินงานที่ไม่แน่นอนเช่นMap::putและMap::removeที่ฉันต้องการจะหลีกเลี่ยง: // // the key is the largest …

1
ผู้ประกอบการ '+' ไม่สามารถนำไปใช้กับวัตถุและสตริง
รหัสต่อไปนี้: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } รวบรวมโดยไม่มีข้อผิดพลาดใน JDK 8 (ใช้ -source 1.6) แต่ล้มเหลวใน JDK 6 พร้อมข้อความแสดงข้อผิดพลาด: Operator '+' cannot be applied to java.lang.Object and java.lang.String ในขณะที่ฉันเข้าใจว่าข้อผิดพลาดเกี่ยวกับอะไรทำไมถึงต้องคอมไพล์ด้วย JDK 8? เอกสารนี้มีอยู่ทุกที่หรือไม่?
12 java  java-8  javac  java-6 

2
Java หยุดบริการผู้ปฏิบัติการเมื่องานที่ได้รับมอบหมายอย่างใดอย่างหนึ่งของเขาล้มเหลวด้วยเหตุผลใด
ฉันต้องการบริการบางประเภทที่จะทำงานสองสามอย่างพร้อมกันและในช่วงเวลา 1 วินาทีเป็นเวลา 1 นาที หากงานใดงานหนึ่งล้มเหลวฉันต้องการหยุดบริการและงานทุกอย่างที่วิ่งไปพร้อมกับตัวบ่งชี้บางอย่างที่มีบางอย่างผิดปกติมิฉะนั้นหากหลังจากผ่านไปหนึ่งนาทีทุกอย่างไปได้ดีบริการจะหยุดทำงานโดยมีตัวบ่งชี้ว่า ตัวอย่างเช่นฉันมี 2 ฟังก์ชั่น: Runnable task1 = ()->{ int num = Math.rand(1,100); if (num < 5){ throw new Exception("something went wrong with this task,terminate"); } } Runnable task2 = ()->{ int num = Math.rand(1,100) return num < 50; } ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2); task1schedule = …

2
จะเข้าใจวิธีการรวบรวม Java 8 Stream นี้ได้อย่างไร?
ฉันพยายามแปลง int เป็น List และใช้เส้นทางที่ไม่คุ้นเคยในการใช้ Java 8 Stream และคิดสิ่งนี้ขึ้นมา Arrays.stream(arr).boxed().collect(Collectors.toList()); ฉันยังคงมีปัญหาในการเข้าใจบรรทัดนี้ส่วนใหญ่ เหตุใดCollectors.toList()ในกรณีนี้จึงส่งคืนอินเตอร์เฟสที่ArrayList<Integer>ใช้งาน Listทำไมไม่LinkedList<Integer>หรือคลาสทั่วไปอื่น ๆ ที่สอดคล้องกับListอินเตอร์เฟส? ฉันไม่พบสิ่งใดเกี่ยวกับเรื่องนี้ยกเว้นการกล่าวถึง ArrayList สั้น ๆที่นี่ในส่วน API Notes แผงด้านซ้าย หมายถึงอะไร เห็นได้ชัดว่าเป็นประเภทผลตอบแทนทั่วไป ( ในรหัสของฉันที่นี่) และฉันคิดว่าเป็นอาร์กิวเมนต์ประเภททั่วไปของวิธีการ แต่พวกเขาจะระบุได้อย่างไร ผมมองเข้าไปสะสมอินเตอร์เฟซ doc และไม่สามารถที่จะดูดซึมได้ Stream.collect()RArrayList<Integer><R, A>

2
คุณสามารถปรับสมดุล Spliterator ที่ไม่ทราบขนาดได้หรือไม่?
ฉันต้องการใช้การStreamประมวลผลแบบขนานของชุดไฟล์ JSON ที่จัดเก็บจากระยะไกลซึ่งเป็นหมายเลขที่ไม่รู้จัก (จำนวนไฟล์ไม่ทราบล่วงหน้า) ไฟล์สามารถมีขนาดแตกต่างกันอย่างมากตั้งแต่ 1 ระเบียน JSON ต่อไฟล์สูงสุด 100,000 ระเบียนในไฟล์อื่น ๆ บันทึก JSONในกรณีนี้หมายถึงการที่ตนเองมีวัตถุ JSON แสดงเป็นหนึ่งบรรทัดในไฟล์ ฉันต้องการใช้ Streams สำหรับสิ่งนี้และดังนั้นฉันจึงใช้สิ่งนี้Spliterator: public abstract class JsonStreamSpliterator<METADATA, RECORD> extends AbstractSpliterator<RECORD> { abstract protected JsonStreamSupport<METADATA> openInputStream(String path); abstract protected RECORD parse(METADATA metadata, Map<String, Object> json); private static final int ADDITIONAL_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.DISTINCT | …

3
Custom Sorting ในแบบที่ A มาก่อน a และ B มาก่อน b
ฉันมีรายการสีดังนี้: ชมพู, ฟ้า, แดง, น้ำเงิน, เทา, เขียว, ม่วง, ดำ ... ฯลฯ List<String> listOfColors = Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black"); มีการดำเนินการระดับกลางบางอย่างเช่นการกรองสีผลไม้ตอนนี้ฉันเหลือผลลัพธ์การกรองที่ฉันต้องการเรียงลำดับ: สีน้ำเงิน, ดำ, น้ำเงิน, เทา, เขียว, ชมพู, ม่วง, แดง ฉันเหนื่อย : List<String> collect = listOfColors.stream().sorted(String::compareToIgnoreCase) .collect(Collectors.toList()); มันไม่ทำงานตามที่คาดไว้ ผลลัพธ์มีดังต่อไปนี้: ดำ, น้ำเงิน, น้ำเงิน, เขียว, เทา, ชมพู, ม่วง, แดง ฉันต้องการสิ่งต่อไปนี้: สีน้ำเงิน, …

5
วิธีการหาสัปดาห์รวมของปีใน Java?
ฉันกำลังทำงานในโครงการ ที่นั่นฉันควรค้นหาสัปดาห์ทั้งหมดของปี ฉันลองใช้รหัสต่อไปนี้ แต่ฉันได้รับคำตอบที่ผิด: 2020 มี 53 สัปดาห์ แต่รหัสนี้ให้ 52 สัปดาห์ ฉันผิดไปในรหัสนี้ที่ไหน package com.hib.mapping; import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.Calendar; import java.util.GregorianCalendar; import org.joda.time.DateTime; public class TestWeek { public static void main(String args[]) { System.out.println(getWeeks()); } public static int getWeeks() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2020); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, …

1
ทำไมคอมไพเลอร์เลือกวิธีการทั่วไปนี้ด้วยพารามิเตอร์ประเภทคลาสเมื่อเรียกใช้ด้วยประเภทอินเตอร์เฟสที่ไม่เกี่ยวข้อง?
พิจารณาสองคลาสและอินเทอร์เฟซต่อไปนี้: public class Class1 {} public class Class2 {} public interface Interface1 {} ทำไมการเรียกครั้งที่สองเพื่อmandatoryเรียกใช้เมธอดโอเวอร์โหลดด้วยClass2ถ้าgetInterface1และInterface1ไม่มีความสัมพันธ์กับClass2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …

1
การอ้างอิงเมธอดและ Generics ใน Java-8
ฉันกำลังประสบปัญหากับการอ้างอิงวิธีการรวมกับประเภททั่วไป เรามีรหัสที่เราต้องเรียกใช้วิธีการโอเวอร์โหลด แต่มันล้มเหลวด้วยข้อผิดพลาด: ไม่สามารถแก้ไขค่า m1 () ฉันทำให้ปัญหาของฉันง่ายขึ้นเพื่อทำให้ชัดเจนว่าปัญหาอยู่ที่ใด รหัสต่อไปนี้ล้มเหลว: public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } <E extends I1, T> void setValue(BiConsumer<E, T> cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void …
11 java  generics  lambda  java-8 

2
การล้างรายการข้อมูลใน Java8
สำหรับการล้างรายการข้อมูลฉันได้สร้างวิธีการที่ยอมรับรายการข้อมูลและรายการการดำเนินการล้างที่จะดำเนินการ public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) { List<T>dataNew=data.stream().map((str) -> { T cleanData = str; for(Function<T,T> function:cleanOps) { cleanData=function.apply(cleanData); } return cleanData; }).collect(Collectors.toList()); return dataNew; } ปัญหาที่นี่คือเรากำลังสร้างรายการทั้งหมดอีกครั้งเมื่อCollectors.toList()ส่งคืนรายการใหม่ เราสามารถบรรลุผลลัพธ์เดียวกันโดยไม่ต้องใช้พื้นที่เพิ่มเติมหรือไม่ ด้านล่างนี้เป็นรหัสสำหรับการร้องขอ: public void processData() { List<Function<String, String>> cleanOps = new ArrayList<>(); cleanOps.add(String::toLowerCase); cleanOps.add(str -> str.replaceAll(" ", "")); List<String> data = …

4
peek () และ allMatch () ทำงานร่วมกันอย่างไรใน Java 8 Stream API
ฉันพบคำถามเกี่ยวกับ Java 8 Stream API ของวิธีการแอบดูด้านล่าง Arrays.asList("Fred", "Jim", "Sheila") .stream() .peek(System.out::println) .allMatch(s -> s.startsWith("F")); ผลลัพธ์คือ Fred Jim ฉันสับสนว่าสตรีมนี้ทำงานอย่างไร ผลลัพธ์ที่คาดหวังของฉันควรจะเป็น Fred Jim Sheila peek () วิธีการคือการดำเนินการระดับกลางและจะประมวลผลแต่ละองค์ประกอบในสตรีม ใครสามารถอธิบายฉันนี้

6
วิธีค้นหาวันที่ล่าสุดจากค่าแม็พที่กำหนดใน java
ฉันกำลังแฮชแผนที่ที่มีค่าด้านล่างในค่าที่ฉันเคยเป็นชนิดข้อมูลสตริง ฉันต้องการเปรียบเทียบวันที่ทั้งหมดที่มีอยู่ในแผนที่และดึงคีย์ - ค่าเดียวเท่านั้นที่มีวันที่ล่าสุด ฉันอยากจะเปรียบเทียบกับค่าที่ไม่ใช่กุญแจ ฉันได้รวมรหัสด้านล่าง import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "1999-01-01"); map.put("2", "2013-10-11"); map.put("3", "2011-02-20"); map.put("4", "2014-09-09"); map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v)); } …

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