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

ใช้แท็กนี้สำหรับคำถามที่เกี่ยวข้องกับการใช้ Stream API มันถูกนำมาใช้ใน Java 8 และสนับสนุนการดำเนินงานสไตล์การทำงานกับกระแสของค่าเช่นท่อกรองลดแผนที่ในคอลเลกชัน

9
Java SE 8 มีคู่หรือ Tuples หรือไม่
ฉันกำลังเล่นกับการทำงานที่ขี้เกียจใน Java SE 8 และฉันต้องการmapดัชนีiไปเป็นคู่ / tuple (i, value[i])จากนั้นfilterขึ้นอยู่กับvalue[i]องค์ประกอบที่สองและสุดท้ายก็ส่งออกดัชนี ฉันต้องยังคงประสบกับสิ่งนี้: อะไรคือสิ่งที่เทียบเท่าของ C ++ Pair <L, R> ใน 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, …

9
วิธีใช้แลมบ์ดาของ Java8 เพื่อจัดเรียงสตรีมในลำดับย้อนกลับ
ฉันใช้แลมบ์ดา java เพื่อเรียงลำดับรายการ ฉันจะจัดเรียงมันในทางกลับกันได้อย่างไร ฉันเห็นโพสต์นี้แต่ฉันต้องการใช้ java 8 แลมบ์ดา นี่คือรหัสของฉัน (ฉันใช้ * -1) เป็นแฮ็ค Arrays.asList(files).stream() .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName())) .sorted(new Comparator<File>() { public int compare(File o1, File o2) { int answer; if (o1.lastModified() == o2.lastModified()) { answer = 0; } else if (o1.lastModified() > o2.lastModified()) { answer = 1; } else …

4
Java 8 Stream.collect ใดที่มีอยู่ในไลบรารี Kotlin มาตรฐาน
ใน Java 8 มีการStream.collectอนุญาตให้รวมตัวกันบนคอลเลกชัน ใน Kotlin สิ่งนี้ไม่ได้อยู่ในลักษณะเดียวกันนอกเหนือไปจากบางทีอาจเป็นชุดของฟังก์ชันส่วนขยายใน stdlib แต่มันไม่ชัดเจนว่าการเทียบเคียงสำหรับกรณีการใช้งานที่แตกต่างกันอย่างไร ตัวอย่างเช่นที่ด้านบนของ JavaDoc สำหรับCollectorsเป็นตัวอย่างที่เขียนขึ้นสำหรับ Java 8 และเมื่อย้ายไปยัง Kolin คุณจะไม่สามารถใช้คลาส Java 8 เมื่ออยู่ในรุ่น JDK ที่แตกต่างกันดังนั้นจึงเป็นไปได้ว่าพวกเขาควรจะเขียนต่างกัน ในแง่ของทรัพยากรออนไลน์แสดงตัวอย่างของคอลเลกชัน Kotlin พวกเขามักจะเล็กน้อยและไม่ได้เปรียบเทียบกับกรณีการใช้งานที่เหมือนกัน มีตัวอย่างที่ดีอะไรบ้างที่ตรงกับเคสเช่นเอกสารสำหรับ Java 8 Stream.collect? รายการมี: สะสมชื่อลงในรายการ สะสมชื่อลงใน TreeSet แปลงองค์ประกอบเป็นสตริงและเชื่อมต่อพวกเขาคั่นด้วยเครื่องหมายจุลภาค คำนวณผลรวมของเงินเดือนของพนักงาน จัดกลุ่มพนักงานตามแผนก คำนวณยอดรวมเงินเดือนตามแผนก แบ่งนักเรียนให้ผ่านและไม่ผ่าน ด้วยรายละเอียดใน JavaDoc ที่ลิงค์ด้านบน หมายเหตุ: คำถามนี้เขียนโดยเจตนาและตอบโดยผู้เขียน ( คำถามที่ตอบด้วยตนเอง ) ดังนั้นคำตอบที่เป็นไปตามหัวข้อ Kotlin ที่ถูกถามบ่อยนั้นมีอยู่ใน SO …

5
การเพิ่ม BigDecimals โดยใช้ Streams
ฉันมีคอลเลกชันของ BigDecimals (ในตัวอย่างนี้กLinkedList) ที่ฉันต้องการเพิ่มเข้าด้วยกัน เป็นไปได้ไหมที่จะใช้สตรีมสำหรับสิ่งนี้ ฉันสังเกตเห็นว่าStreamห้องเรียนมีหลายวิธี Stream::mapToInt Stream::mapToDouble Stream::mapToLong ซึ่งแต่ละsum()วิธีมีวิธีที่สะดวก แต่อย่างที่เรารู้floatและdoubleเลขคณิตเป็นความคิดที่เลว ดังนั้นมีวิธีที่สะดวกในการสรุป BigDecimals หรือไม่ นี่คือรหัสที่ฉันมี public static void main(String[] args) { LinkedList<BigDecimal> values = new LinkedList<>(); values.add(BigDecimal.valueOf(.1)); values.add(BigDecimal.valueOf(1.1)); values.add(BigDecimal.valueOf(2.1)); values.add(BigDecimal.valueOf(.1)); // Classical Java approach BigDecimal sum = BigDecimal.ZERO; for(BigDecimal value : values) { System.out.println(value); sum = sum.add(value); } System.out.println("Sum = …

7
Java 8: ฉันจะทำงานกับเมธอดการโยนข้อยกเว้นในสตรีมได้อย่างไร
สมมติว่าฉันมีชั้นเรียนและวิธีการ class A { void foo() throws Exception() { ... } } ตอนนี้ฉันต้องการเรียก foo สำหรับแต่ละอินสแตนซ์ที่Aส่งโดยสตรีมเช่น: void bar() throws Exception { Stream<A> as = ... as.forEach(a -> a.foo()); } คำถาม: ฉันจะจัดการข้อยกเว้นได้อย่างถูกต้องได้อย่างไร? รหัสไม่ได้รวบรวมในเครื่องของฉันเพราะฉันไม่จัดการข้อยกเว้นที่เป็นไปได้ที่สามารถโยนโดย foo () throws Exceptionของbarดูเหมือนว่าจะไร้ประโยชน์ที่นี่ ทำไมถึงเป็นอย่างนั้น?

8
การเพิ่ม Java 8 สตรีมสองรายการหรือองค์ประกอบพิเศษให้กับสตรีม
ฉันสามารถเพิ่มสตรีมหรือองค์ประกอบเพิ่มเติมเช่นนี้ Stream stream = Stream.concat(stream1, Stream.concat(stream2, Stream.of(element)); และฉันสามารถเพิ่มสิ่งใหม่ตามที่ฉันไปเช่นนี้ Stream stream = Stream.concat( Stream.concat( stream1.filter(x -> x!=0), stream2) .filter(x -> x!=1), Stream.of(element)) .filter(x -> x!=2); แต่นี่น่าเกลียดเพราะconcatเป็นแบบคงที่ หากconcatเป็นวิธีการแบบอินสแตนซ์ตัวอย่างด้านบนจะง่ายต่อการอ่านมากขึ้น: Stream stream = stream1.concat(stream2).concat(element); และ Stream stream = stream1 .filter(x -> x!=0) .concat(stream2) .filter(x -> x!=1) .concat(element) .filter(x -> x!=2); คำถามของฉันคือ: 1) มีเหตุผลที่ดีใด ๆ …

9
ฉันควรส่งคืนคอลเล็กชันหรือสตรีมหรือไม่
สมมติว่าฉันมีวิธีที่ส่งกลับมุมมองแบบอ่านอย่างเดียวในรายการสมาชิก: class Team { private List < Player > players = new ArrayList < > (); // ... public List < Player > getPlayers() { return Collections.unmodifiableList(players); } } นอกจากนี้สมมติว่าลูกค้าทั้งหมดทำซ้ำในรายการทันที อาจจะนำผู้เล่นเข้าสู่ JList หรืออะไรบางอย่าง ลูกค้าไม่ได้จัดเก็บการอ้างอิงไปยังรายการสำหรับการตรวจสอบในภายหลัง! ในสถานการณ์ทั่วไปนี้ฉันควรส่งคืนสตรีมแทนหรือไม่ public Stream < Player > getPlayers() { return players.stream(); } หรือส่งคืนสตรีมที่ไม่มีลักษณะเฉพาะใน Java หรือไม่ สตรีมที่ออกแบบมาให้ "ยุติ" …

4
เป็นไปได้ไหมที่จะส่งกระแสข้อมูลใน Java 8?
เป็นไปได้หรือไม่ที่จะส่งกระแสข้อมูลใน Java 8? ว่าฉันมีรายการวัตถุฉันสามารถทำสิ่งนี้เพื่อกรองวัตถุเพิ่มเติมทั้งหมด: Stream.of(objects).filter(c -> c instanceof Client) แม้ว่าหลังจากนี้ถ้าฉันต้องการทำบางสิ่งกับลูกค้าฉันจะต้องเลือกแต่ละคน: Stream.of(objects).filter(c -> c instanceof Client) .map(c -> ((Client) c).getID()).forEach(System.out::println); มันดูน่าเกลียดเล็กน้อย เป็นไปได้ไหมที่จะส่งกระแสข้อมูลทั้งหมดไปเป็นประเภทอื่น ชอบที่Stream<Object>จะหล่อStream<Client>? โปรดเพิกเฉยต่อความจริงที่ว่าการทำสิ่งนี้อาจหมายถึงการออกแบบที่ไม่ดี เราทำสิ่งนี้ในวิชาวิทยาศาสตร์คอมพิวเตอร์ของฉันดังนั้นฉันจึงได้ตรวจสอบคุณสมบัติใหม่ของ java 8 และอยากรู้ว่าเป็นไปได้ไหม
160 java  java-8  java-stream 


26
ลำดับการสตรีม Java 8 แบบย้อนกลับ
คำถามทั่วไป: อะไรคือวิธีที่เหมาะสมในการย้อนกลับสตรีม สมมติว่าเราไม่ทราบว่าองค์ประกอบใดของสตรีมที่ประกอบไปด้วยอะไรคือวิธีทั่วไปในการย้อนกลับสตรีมใด ๆ คำถามเฉพาะ: IntStreamนำเสนอวิธีการแบบช่วงเพื่อสร้างจำนวนเต็มในช่วงที่เฉพาะเจาะจงIntStream.range(-range, 0)ตอนนี้ฉันต้องการย้อนกลับจากการเปลี่ยนช่วงจาก 0 ไปเป็นค่าลบจะไม่ทำงานและฉันไม่สามารถใช้Integer::compare List<Integer> list = Arrays.asList(1,2,3,4); list.stream().sorted(Integer::compare).forEach(System.out::println); กับIntStreamฉันจะได้รับรวบรวมข้อผิดพลาดนี้ ข้อผิดพลาด: (191, 0) ajc: วิธีการsorted()ในประเภทIntStreamไม่สามารถใช้ได้กับข้อโต้แย้ง ( Integer::compare) ฉันคิดถึงอะไรที่นี่

14
การบีบอัดสตรีมโดยใช้ JDK8 พร้อม lambda (java.util.stream.Streams.zip)
ใน JDK 8 ที่มีแลมบ์ดา b93 มีคลาสjava.util.stream.Streams.zip ใน b93ซึ่งสามารถใช้ในการสตรีม zip (นี่คือตัวอย่างในบทเรียนExploring Java8 Lambdas ตอนที่ 1 โดย Dhananjay Nene ) ฟังก์ชั่นนี้: สร้างสตรีมรวมที่ขี้เกียจและต่อเนื่องกันซึ่งองค์ประกอบเป็นผลลัพธ์ของการรวมองค์ประกอบของสองสตรีม อย่างไรก็ตามใน b98 นี้ได้หายไป Infact Streamsชั้นไม่ได้สามารถเข้าถึงได้ในjava.util.stream ใน B98 ฟังก์ชั่นนี้ได้ถูกย้ายไปแล้วหรือไม่และถ้าอย่างนั้นฉันจะซิปสตรีมอย่างกระชับโดยใช้ b98 ได้อย่างไร? แอปพลิเคชันที่ฉันมีอยู่ในการใช้งานจาวาของ Shenซึ่งฉันได้แทนที่ฟังก์ชั่น zip ใน static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> …

2
จะมั่นใจลำดับการประมวลผลในสตรีม java8 ได้อย่างไร
ฉันต้องการประมวลผลรายการภายในXMLวัตถุ java ฉันต้องแน่ใจว่าประมวลผลองค์ประกอบทั้งหมดตามลำดับที่ได้รับ ฉันควรโทรหาsequentialแต่ละครั้งที่streamฉันใช้หรือไม่ list.stream().sequential().filter().forEach() หรือมันก็เพียงพอแล้วที่จะใช้กระแสตราบเท่าที่ฉันไม่ได้ใช้คู่ขนาน? list.stream().filter().forEach()
148 java  java-8  java-stream 

10
คุณสามารถแบ่งสตรีมเป็นสองสตรีมได้หรือไม่?
ฉันมีชุดข้อมูลที่แสดงโดยกระแส Java 8: Stream<T> stream = ...; ฉันสามารถดูวิธีการกรองเพื่อให้ได้ชุดย่อยแบบสุ่ม - ตัวอย่างเช่น Random r = new Random(); PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator(); Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0)); ฉันยังสามารถดูวิธีที่ฉันสามารถลดสตรีมนี้เพื่อให้ได้ตัวอย่างเช่นสองรายการที่แสดงชุดข้อมูลแบบสุ่มสองครึ่งและจากนั้นเปลี่ยนกลับเป็นสตรีม แต่มีวิธีโดยตรงในการสร้างสองสตรีมจากสตรีมเริ่มต้นหรือไม่ สิ่งที่ต้องการ (heads, tails) = stream.[some kind of split based on filter] ขอบคุณสำหรับความเข้าใจใด ๆ
146 java  java-8  java-stream 

7
ความแตกต่างระหว่าง Java 8 สตรีมและ RxJava ที่สังเกตได้
Java 8 สตรีมคล้ายกับ RxJava หรือไม่ การกำหนดสตรีม Java 8: คลาสในjava.util.streamแพ็คเกจใหม่มี Stream API เพื่อรองรับการทำงานในรูปแบบการใช้งานในส่วนขององค์ประกอบ

7
Java 8 Streams - รวบรวม vs ลด
เมื่อคุณจะใช้collect()VS reduce()? มีใครบ้างที่เป็นตัวอย่างที่ดีและเป็นรูปธรรมว่าเมื่อใดควรไปทางเดียวหรือดีกว่า javadoc กล่าวว่าการเก็บรวบรวม () การลดลงแน่นอน ระบุว่าเป็นการลดที่ไม่แน่นอนฉันคิดว่ามันต้องมีการประสาน (ภายใน) ซึ่งในทางกลับกันอาจเป็นอันตรายต่อประสิทธิภาพการทำงาน สันนิษฐานได้ว่าreduce()เป็นแบบขนานที่พร้อมใช้งานมากขึ้นโดยไม่ต้องสร้างโครงสร้างข้อมูลใหม่เพื่อให้ได้รับผลตอบแทนหลังจากทุกขั้นตอนในการลด ข้อความข้างต้นเป็นการคาดเดาอย่างไรก็ตามและฉันรักผู้เชี่ยวชาญในการพูดสอดที่นี่
143 java  java-8  java-stream 

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