ทุกสิ่งที่คุณต้องการรู้เกี่ยวกับสตรีมใน Java



บทความนี้จะแนะนำให้คุณรู้จักกับ Stream ใน Java ซึ่งเป็นแพ็คเกจที่เพิ่งเปิดตัวใน Java และคำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่สามารถทำได้

แพ็คเกจเพิ่มเติมใหม่ใน Java 8 หรือที่เรียกว่า เพิ่ม java.util.stream สำหรับ ผู้ใช้สำหรับประสบการณ์การเขียนโปรแกรมที่มีประสิทธิภาพ สตรีมสามารถกำหนดเป็นลำดับของออบเจ็กต์ได้โดยรองรับหลายวิธี ในบทความนี้เราจะสำรวจสตรีมอิน

คำแนะนำต่อไปนี้จะครอบคลุมอยู่ในบทความนี้





ก่อนที่เราจะเริ่มบทความนี้เกี่ยวกับ Stream In Java ให้เรามาดูคุณสมบัติที่สำคัญบางอย่าง

สตรีมใน Java: คุณสมบัติ

  • สตรีมไม่ใช่โครงสร้างข้อมูลและไม่ได้จัดเก็บองค์ประกอบ Collections, Arrays หรือ I / O Channels เป็นที่ที่รับอินพุตจาก
  • แหล่งที่มาของสตรีมยังคงไม่ได้รับการแก้ไขหลังจากดำเนินการกับสตรีมแล้ว ตัวอย่างเช่นการกรองสตรีมเป็นเพียงการสร้างสตรีมใหม่โดยไม่มีองค์ประกอบที่ถูกกรองแทนที่จะแก้ไขสตรีมดั้งเดิม
  • การดำเนินการรวมเช่นกรองลดจับคู่ค้นหา ฯลฯ ได้รับการสนับสนุนโดยสตรีม
  • ความเกียจคร้านถือได้ว่าเป็นคุณลักษณะของสตรีมเนื่องจากจะประเมินรหัสเมื่อจำเป็นเท่านั้น
  • การเยี่ยมชมองค์ประกอบที่มีอยู่ในสตรีมสามารถทำได้เพียงครั้งเดียวในช่วงชีวิตของสตรีม ต้องสร้างสตรีมใหม่เพื่อทบทวนองค์ประกอบเดิมที่มีอยู่ในแหล่งที่มา

ดำเนินการต่อด้วยบทความนี้เกี่ยวกับสตรีมใน Java



กำลังสร้างสตรีม

สตรีมสามารถสร้างได้ด้วยวิธีการต่อไปนี้:

  • กระแส() - สตรีมตามลำดับจะถูกส่งกลับคอลเลกชันถือเป็นแหล่งที่มา
  • ParallelStream () - ส่งคืนสตรีมแบบขนาน คอลเลกชันถือเป็นแหล่งที่มา
List strings = Arrays.asList ('Hello', '', 'Hi', 'Hola', 'Bonjour', '', 'Namaste') List filtered = strings.stream (). filter (string ->! string. isEmpty ()) รวบรวม (Collectors.toList ())

ดำเนินการต่อด้วยบทความนี้เกี่ยวกับสตรีมใน Java

การดำเนินการบนสตรีม:

การดำเนินงานระดับกลาง:

แผนที่



องค์ประกอบที่มีอยู่ในคอลเลกชันสามารถแมปกับวัตถุอื่น ๆ ตามเพรดิเคตที่ส่งผ่านมาเป็นอาร์กิวเมนต์ ตัวอย่างต่อไปนี้ใช้เพื่อแสดงกำลังสองที่ไม่ซ้ำกันของตัวเลขโดยใช้วิธีแผนที่

List num = Arrays.asList (5,4,4,2,3,3) List squares = num.stream (). map (y -> y * y) .distinct (). collect (Collectors.toList ())

กรอง

องค์ประกอบสามารถลบออกตามเกณฑ์โดยใช้วิธีนี้

ชื่อรายการ = Arrays.asList ('Saturday', 'Sunday', 'Thursday') รายการ res = name.stream (). filter (s-> s.startsWith ('S')) รวบรวม (Collectors.toList () )

จัดเรียง

สามารถจัดเรียงสตรีมได้โดยใช้วิธีนี้

ชื่อรายการ = Arrays.asList ('Saturday', 'Sunday', 'Thursday') List res = name.stream (). sorted (). collect (Collectors.toList ())

สตรีมใน Java: การทำงานของเทอร์มินัล:

เก็บ

ผลลัพธ์ของการประมวลผลองค์ประกอบของสตรีมสามารถรวมกันได้โดยใช้การดำเนินการรวบรวม

รายการ num = Arrays.asList (4,3,2,5,6) ตั้งค่า res = num.stream () แผนที่ (y-> y * y) .collect (Collectors.toSet ())

แต่ละ

วิธีนี้ใช้สำหรับการวนซ้ำทุกองค์ประกอบที่มีอยู่ในสตรีม

List num = Arrays.asList (4,3,2,5) num.stream (). map (x-> x * x) .forEach (y-> System.out.println (y))

ลด

องค์ประกอบของสตรีมสามารถลดลงเป็นค่าเดียวได้โดยใช้วิธีนี้

รายการ num = Arrays.asList (4,3,2,5) int even = num.stream (). filter (x-> x% 2 == 0) .reduce (0, (res, i) -> res + ผม)

ตัวแปร res ถูกกำหนดค่า 0 ในตอนแรกและฉันจะถูกเพิ่มเข้าไป

ดำเนินการต่อด้วยบทความนี้เกี่ยวกับสตรีมใน Java

การกรอง

โค้ดสามารถกรองได้โดยใช้วิธีการสตรีม ในตัวอย่างต่อไปนี้ราคาของตราสารจะถูกกรองออก

import java.util. * import java.util.stream.Collectors class Instrument {int num String name float price public Instrument (int num, String name, float price) {this.num = num this.name = name this.price = price}} การทดสอบคลาสสาธารณะ {public static void main (String [] args) {List instrumentsList = new ArrayList () // Adding Products instrumentsList.add (new Instrument (1, 'Guitar', 15000f)) instrumentsList.add (new Instrument (2, 'Piano', 18000f)) instrumentsList.add (เครื่องดนตรีใหม่ (3, 'ฟลุต', 15000f)) instrumentsList.add (เครื่องมือใหม่ (4, 'กลอง', 48000f)) instrumentsList.add (เครื่องมือใหม่ ( 5, 'Ukulele', 32000f)) List InstrumentPriceList2 = instrumentsList.stream () .filter (p -> p.price> 30000) // การกรองข้อมูล. map (p-> p.price) // การดึงราคา Collectors.toList ()) // รวบรวมเป็นรายการ System.out.println (InstrumentPriceList2)}}
 เอาท์พุต: 

[48000.0, 32000.0]

การมีเพศสัมพันธ์ที่แน่นและการมีเพศสัมพันธ์แบบหลวม

ดำเนินการต่อด้วยบทความนี้เกี่ยวกับสตรีมใน Java

การทำซ้ำ:

การทำซ้ำสามารถทำได้โดยใช้สตรีมใน java

import java.util.stream. * public class Test {public static void main (String [] args) {Stream.iterate (1, element-> element + 1) .filter (element-> element% 4 == 0) ขีด จำกัด (6) .forEach (System.out :: println)}}

เอาท์พุต:

4

8

12

16

ยี่สิบ

24

มาดูอีกตัวอย่างหนึ่งเพื่อทำความเข้าใจแนวคิดของ Stream ใน java ได้อย่างมีประสิทธิภาพมากขึ้น

ตัวอย่าง:

import java.util. * import java.util.stream * public class Test {public static void main (String args []) {// การสร้างรายการจำนวนเต็ม List num = Arrays.asList (6,7,8,9 ) // โดยใช้วิธีการแผนที่ List squares = num.stream (). map (y -> y * y) รวบรวม (Collectors.toList ()) System.out.println (สี่เหลี่ยม) // การสร้างรายการ String List days = Arrays.asList ('Friday', 'Saturday', 'Sunday') // วิธีการกรองรายการ res = วัน .stream (). ตัวกรอง (s-> s.startsWith ('S')) รวบรวม (Collectors.toList ()) System.out.println (res) // วิธีการจัดเรียง List display = days.stream (). sorted (). collect (Collectors.toList ()) System.out.println (display) / / การสร้างรายการจำนวนเต็มหมายเลขรายการ = Arrays.asList (6,9,5,7,1) // วิธีการรวบรวมจะส่งกลับชุด Set sqSet = number.stream (). map (y-> y * y) .collect (Collectors.toSet ()) System.out.println (sqSet) // forEach method num.stream (). map (y-> y * y) .forEach (x-> System.out.println (x)) / / ลด method int even = num.stream (). filter (x-> x% 2 == 0) .reduce (0, (result, i) -> result + i) System.out.println (even)}}

เอาท์พุต:

[36, 49, 64, 81]

[เสาร์อาทิตย์]

[วันศุกร์วันเสาร์วันอาทิตย์]

[81, 49, 1, 36, 25]

36

49

64

81

14

สตรีมช่วยให้ผู้ใช้สามารถดำเนินการกับองค์ประกอบได้อย่างมีประสิทธิภาพ

ดังนั้นเราจึงมาถึงตอนท้ายของบทความนี้ใน 'สตรีมใน Java' หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดู Java Training โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด