1. การแปลงข้อมูล
คลาสStream<T>
ยังมีวิธีการที่ให้คุณแปลงข้อมูลจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง วิธีการนี้map()
คือ
นอกจากนี้ยังส่งคืนสตรีม แต่มีองค์ประกอบประเภทอื่น เมธอดmap()
ใช้อาร์กิวเมนต์เมธอดเป็นฟังก์ชันที่แปลงข้อมูลประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง
ตัวอย่าง:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
อาร์กิวเมนต์ของฟังก์ชันที่ส่งผ่านไปยังmap()
เมธอดจะใช้ตัวเลขx
และส่งกลับการแทนค่าสตริง อย่างไรก็ตาม คุณสามารถเขียนโค้ดนี้ให้กระชับกว่านี้ได้:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
การแปลงสตริงเป็นตัวเลข
ในทำนองเดียวกัน คุณสามารถเขียนโค้ดเพื่อแปลงสตริงเป็นตัวเลขได้ ซึ่งก็ไม่ซับซ้อนเช่นกัน:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
การแปลงสตริงเป็น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 );
เราสร้างคอลเลกชันและเติมที่อยู่เว็บ 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;
}
});
เราพูดอะไรได้บ้าง? คุณควรคิดให้ดีก่อนที่จะใช้ข้อยกเว้นที่ตรวจสอบ และคิดสามครั้งก่อนที่จะใช้ในคอนสตรัคเตอร์
GO TO FULL VERSION