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

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

4
การจัดการข้อยกเว้นด้วยสตรีม
ฉันมีMap<String,List<String>>และต้องการที่จะกลายเป็นMap<String,List<Long>>เพราะแต่ละคนStringในรายการแสดงถึงLong: Map<String,List<String>> input = ...; Map<String,List<Long>> output= input.entrySet() .stream() .collect(toMap(Entry::getKey, e -> e.getValue().stream() .map(Long::valueOf) .collect(toList())) ); ปัญหาหลักของฉันคือแต่ละคนStringอาจไม่ได้แสดงอย่างถูกต้อง a Long; อาจมีปัญหาบางอย่าง Long::valueOfอาจเพิ่มข้อยกเว้น หากเป็นกรณีนี้ฉันต้องการคืนค่าว่างหรือไม่Map<String,List<Long>> เพราะฉันต้องการทำซ้ำหลังจากผ่านoutputแผนที่นี้ แต่ฉันไม่สามารถยอมรับการแปลงผิดพลาดได้ ไม่แม้แต่คนเดียว มีความคิดเกี่ยวกับวิธีที่ฉันสามารถคืนเอาต์พุตว่างในกรณีที่ String ไม่ถูกต้อง -> การแปลงยาว?

1
remove หากรายละเอียดการใช้งาน
ArrayList::removeIfฉันมีคำถามรายละเอียดการดำเนินงานขนาดเล็กที่ฉันไม่เข้าใจใน ฉันไม่คิดว่าฉันจะทำได้อย่างที่ไม่เคยมีมาก่อน เป็นเช่น: การดำเนินการนั้นเป็นจำนวนมาก ซึ่งแตกต่างจากremove ArrayList::removeตัวอย่างควรทำให้เข้าใจง่ายขึ้น สมมติว่าฉันมีรายการนี้: List<Integer> list = new ArrayList<>(); // 2, 4, 6, 5, 5 list.add(2); list.add(4); list.add(6); list.add(5); list.add(5); และฉันต้องการลบองค์ประกอบทุกอย่างที่เท่ากัน ฉันทำได้: Iterator<Integer> iter = list.iterator(); while (iter.hasNext()) { int elem = iter.next(); if (elem % 2 == 0) { iter.remove(); } } หรือ : list.removeIf(x -> …
9 java  java-8  iterator 

3
Java Stream: กรองด้วยหลายช่วง
ฉันกำลังพยายามกรองทรัพยากรและไม่รวมองค์ประกอบบางอย่างตามเขตข้อมูล หากต้องการยกเว้นฉันมีชุด (ที่มีรหัสที่ต้องยกเว้น) และรายการ (มีรหัสช่วงที่ต้องแยกออกหลายช่วง) ฉันเขียนตรรกะด้านล่างและฉันไม่พอใจกับตรรกะตัวกรองที่สอง มีวิธีที่ดีกว่าที่เราสามารถทำได้ด้วย Java 8 หรือไม่? ฉันต้องทำสิ่งเดียวกันเพื่อรวมช่วงต่างๆด้วย Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900")); List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000")); return directoryRecords.stream() .filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber())) .filter((directoryRecord -> { Boolean include = true; for(String s : rangesToExclude) { String [] rangeArray = s.split("-"); Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber()); if(extension <= Integer.parseInt(rangeArray[0]) …

1
ทำลายการเพิ่มประสิทธิภาพของ JIT พร้อมการสะท้อนกลับ
เมื่อเล่นซอกับการทดสอบหน่วยสำหรับคลาสซิงเกิลตันที่เกิดขึ้นพร้อมกันสูงฉันสะดุดกับพฤติกรรมแปลก ๆ ต่อไปนี้ (ทดสอบบน JDK 1.8.0_162): private static class SingletonClass { static final SingletonClass INSTANCE = new SingletonClass(0); final int value; static SingletonClass getInstance() { return INSTANCE; } SingletonClass(int value) { this.value = value; } } public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { System.out.println(SingletonClass.getInstance().value); // 0 // Change …

4
รับพนักงานก่อนและหลังวันที่เฉพาะเจาะจงของการเข้าร่วมจากรายชื่อพนักงานที่มีสตรีม Java
ฉันมีListของEmployees กับวันที่มาร่วมงานที่แตกต่างกัน ฉันต้องการรับพนักงานก่อนและหลังวันที่เฉพาะเจาะจงของการเข้าร่วมจากรายการโดยใช้สตรีม ฉันลองรหัสต่อไปนี้ List<Employee> employeeListAfter = employeeList.stream() .filter(e -> e.joiningDate.isAfter(specificDate)) .collect(Collectors.toList()); List<Employee> employeeListBefore = employeeList.stream() .filter(e -> e.joiningDate.isBefore(specificDate)) .collect(Collectors.toList()); class Employee{ int id; String name; LocalDate joiningDate; } มีวิธีการทำเช่นนี้ในกระแสเดียว?

5
วิธีสร้างหลายเธรดสำหรับแต่ละรายการที่ร้องขอ
ฉันพยายามประมวลผลโค้ดด้านล่างโดยใช้มัลติเธรดที่ระดับคำสั่งซื้อ List<String> orders = Arrays.asList("order1", "order2", "order3", "order4", "order1"); การดำเนินการตามลำดับปัจจุบัน: orders.stream().forEach(order -> { rules.forEach(rule -> { finalList.add(beanMapper.getBean(rule) .applyRule(createTemplate.apply(getMetaData.apply(rule), command), order)); }); }); ฉันได้ลองใช้: orders.parallelStream().forEach(order -> {}} // code snippet. แต่มันกำลังเปลี่ยนกฎสำหรับคำสั่งforEach (กฎ -> {}} ตัวอย่างเช่น: อินพุต: List<String> orders = Arrays.asList("order1", "order2", "order3", "order4", "order1"); List<String> rules = Arrays.asList("rule1", "rule2", "rule3"); ผลลัพธ์ที่คาดหวัง: …

2
java.net.SocketException: รีเซ็ตการเชื่อมต่อในเทมเพลต Spring rest
ฉันมีปัญหาแปลก ๆ ที่นี่ รหัสด้านล่างใช้งานได้ดีจนกระทั่งฉันรีสตาร์ทเซิร์ฟเวอร์ Tomcat ที่ฝั่งไคลเอ็นต์ เมื่อฉันรีสตาร์ทเซิร์ฟเวอร์ Tomcat (โปรแกรมไคลเอนต์มีอยู่ในไฟล์ war) พร้อมไฟล์ war ล่าสุดของรหัสเดียวกันมันจะพ่นข้อผิดพลาดด้านล่าง ฉันใช้ JDK 8 ด้านล่างนี้คือตัวอย่างรหัส จากเบราว์เซอร์ฉันสามารถรับการตอบสนองจาก URL ที่ใช้ในโปรแกรมด้านล่าง แต่ไม่สามารถรับข้อมูลโดยใช้โปรแกรมจาวาหรือบุรุษไปรษณีย์ได้เช่นกัน package com.example.demo; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class TestService implements CommandLineRunner{ @Override public void run(String... args) throws Exception { download(); } private void download() { System.out.println("Started …

6
วิธีการทำซ้ำ getters / setters สำหรับคุณสมบัติสาธารณะใน POJO
เรามี POJO ที่สร้างขึ้นโดยอัตโนมัติด้วยคุณสมบัติ ~ 60 สิ่งนี้สร้างขึ้นด้วย avro 1.4 ซึ่งไม่รวม getters / setters ไลบรารีที่เราใช้เพื่อให้การแปลงอย่างง่ายระหว่างวัตถุต้องใช้วิธีเหมือน getter / setter เพื่อให้ทำงานได้อย่างถูกต้อง มีวิธีการทำซ้ำ getters / setters โดยไม่ต้องแทนที่ POJO ด้วยตนเองและสร้าง getters / setters ทั้งหมดด้วยตนเองหรือไม่ public class BigGeneratedPojo { public String firstField; public int secondField; ... public ComplexObject nthField; } public class OtherObject { private String reprOfFirstFieldFromOtherObject; …

3
ส่งคืนรายการเริ่มต้นหากรายการว่างเปล่าโดยใช้ java 8 Streams?
มีวิธีใดบ้างเพื่อให้สามารถดำเนินการด้านล่างเป็นชุดการดำเนินการสตรีมหนึ่งชุดแทนการตรวจสอบอย่างชัดเจนว่าถ้า RecommendedProducts ว่างเปล่าจากนั้นส่งคืนรายการเริ่มต้นมิฉะนั้นจะส่งคืนรายการที่กรองหรือไม่ public List<Product> getRecommendedProducts() { List<Product> recommendedProducts = this.newProducts .stream() .filter(isAvailable) .collect(Collectors.toList()); if (recommendedProducts.isEmpty()) { return DEFAULT_PRODUCTS; } return recommededProducts; }

4
วิธีที่มีประสิทธิภาพในการวนซ้ำและคัดลอกค่าของ HashMap
ฉันต้องการแปลง: Map<String, Map<String, List<Map<String, String>>>> inputMap ถึง: Map<String, Map<String, CustomObject>> customMap inputMapมีให้ในการกำหนดค่าและพร้อม แต่ฉันต้องการcustomMapจัดรูปแบบ CustomObject จะได้มาจากการList<Map<String, String>>ใช้โค้ดไม่กี่บรรทัดในฟังก์ชั่น ฉันได้ลองวิธีการทำแผนที่อินพุตซ้ำและคัดลอกค่าคีย์ใน customMap แล้ว มีวิธีที่มีประสิทธิภาพในการทำเช่นนั้นโดยใช้ Java 8 หรือทางลัดอื่น ๆ ? Map<String, Map<String, List<Map<String, String>>>> configuredMap = new HashMap<>(); Map<String, Map<String, CustomObj>> finalMap = new HashMap<>(); for (Map.Entry<String, Map<String, List<Map<String, String>>>> attributeEntry : configuredMap.entrySet()) { Map<String, …

2
OutOfMemoryException แม้จะใช้ WeakHashMap
หากไม่โทรSystem.gc()ระบบจะส่ง OutOfMemoryException ฉันไม่รู้ว่าทำไมฉันต้องโทรหาSystem.gc()อย่างชัดเจน JVM ควรเรียกgc()ตัวเองใช่ไหม กรุณาแนะนำ ต่อไปนี้เป็นรหัสทดสอบของฉัน: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.