1. การแปลงข้อมูล

คลาสStream<T>ยังมีวิธีการที่ให้คุณแปลงข้อมูลจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง วิธีการนี้map()คือ

นอกจากนี้ยังส่งคืนสตรีม แต่มีองค์ประกอบประเภทอื่น เมธอดmap()ใช้อาร์กิวเมนต์เมธอดเป็นฟังก์ชันที่แปลงข้อมูลประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง

ตัวอย่าง:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
การแปลงIntegerกระแสเป็นStringกระแส

อาร์กิวเมนต์ของฟังก์ชันที่ส่งผ่านไปยังmap()เมธอดจะใช้ตัวเลขxและส่งกลับการแทนค่าสตริง อย่างไรก็ตาม คุณสามารถเขียนโค้ดนี้ให้กระชับกว่านี้ได้:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
การแปลงIntegerกระแสเป็นStringกระแส

การแปลงสตริงเป็นตัวเลข

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

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
การแปลงStringกระแสเป็นIntegerกระแส

การแปลงสตริงเป็นURI

การดำเนินการแปลงข้อมูลอาจใช้ทรัพยากรและเวลามาก สมมติว่าเราต้องการแปลงชุดของสตริงเป็นวัตถุ URI สิ่งนี้ทำได้ง่ายมาก เนื่องจากตัวสร้าง URI ใช้สตริงเป็นอาร์กิวเมนต์

ArrayList<String> list = new ArrayList<String>();
list.add("https://google.com");
list.add("https://linkedin.com");
list.add("https://yandex.com");

Stream<URI> stream = list.stream().map( URI::new );
การแปลงStringกระแสเป็นURIกระแส

เราสร้างคอลเลกชันและเติมที่อยู่เว็บ 3 แห่ง จากนั้นเราได้Stream<String>วัตถุจากคอลเลกชัน และในทางกลับกัน เราก็ได้Stream<URI>วัตถุจากสตรีม นั้น เราส่งเมธอดแมปไปยังเมธอดที่จะใช้ในการแปลงแต่ละสตริงเป็น URI

เมธอดนี้ (ตัวสร้าง) ต้องใช้ a Stringเป็นอาร์กิวเมนต์ ทุกอย่างดูเหมือนจะสมบูรณ์แบบ...


2. ข้อยกเว้น

เราอาจคาดหวังว่าโค้ดด้านบนน่าจะใช้งานได้ แต่จะไม่เป็นเช่นนั้น โปรแกรมจะไม่คอมไพล์ และไม่ใช่เพราะเราทำผิดพลาดที่ไหนสักแห่ง แต่เป็นเพราะผู้สร้างของ Java ทำผิดพลาด

กาลครั้งหนึ่งนานมาแล้ว พวกเขามีความคิดที่ยอดเยี่ยมในการเพิ่มข้อยกเว้นที่ตรวจสอบแล้ว ( URISyntaxException) ให้กับURIตัวสร้างคลาส! และข้อยกเว้นดังกล่าวจะต้องห่อด้วยtry-catch.

ดังนั้นบรรทัดสุดท้ายของโค้ดของเราจะมีลักษณะดังนี้:

Stream<URI> stream = list.stream().map(str ->
{
  try
  {
     return new URI(str);
  }
  catch (URISyntaxException e)
  {
     e.printStackTrace();
     return null;
  }
});

เราพูดอะไรได้บ้าง? คุณควรคิดให้ดีก่อนที่จะใช้ข้อยกเว้นที่ตรวจสอบ และคิดสามครั้งก่อนที่จะใช้ในคอนสตรัคเตอร์