วิธีอ่านไฟล์อย่างถูกต้องใน Java 8 และ Java 11
แหล่งที่มา: ปานกลาง ด้วยบทช่วยสอนนี้ คุณจะได้เรียนรู้เคล็ดลับหลายประการที่เป็นประโยชน์เมื่อประมวลผลและอ่านไฟล์ขนาดใหญ่ใน Java 8 และ Java 11
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileReader {
public static void main(String[] args) {
try {
Path path = Paths.get("file.txt");
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ตัวอย่างนี้ใช้ เมธอด Files.readAllLines()เพื่ออ่านบรรทัดทั้งหมดของไฟล์และจัดเก็บไว้ใน ไฟล์ List<String> Paths.get()วิธีการใช้ในการสร้าง วัตถุ เส้นทางที่เป็นตัวแทนของไฟล์ คุณยังสามารถใช้Files.lines :
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Files;
public class FileReader {
public static void main(String[] args) {
try {
Files.lines(Paths.get("file.txt"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ใน Java 11 หากต้องการอ่านไฟล์คุณสามารถใช้ เมธอด readString()โดยจะอ่านไฟล์ทั้งหมดเป็นสตริง นี่คือตัวอย่างวิธีการใช้งาน
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileReader {
public static void main(String[] args) {
try {
Path path = Paths.get("file.txt");
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
เมื่อทำงานกับไฟล์ขนาดใหญ่ใน Java สิ่งสำคัญคือต้องคำนึงถึงหลักเกณฑ์บางประการ:
- ใช้ เครื่อง อ่านบัฟเฟอร์ ช่วยให้คุณสามารถอ่านข้อมูลจำนวนมากในแต่ละครั้ง แทนที่จะอ่านอักขระตัวเดียวหรือทีละบรรทัด
- ใช้ขนาดบัฟเฟอร์ที่เล็กลง : เมื่อใช้เครื่องอ่านแบบบัฟเฟอร์ ขนาดบัฟเฟอร์ที่เล็กลงจะช่วยลดการใช้หน่วยความจำได้
- ใช้API สตรีมมิ่ง แทนที่จะโหลดไฟล์ทั้งหมดลงในหน่วยความจำ API การสตรีมช่วยให้คุณสามารถอ่านไฟล์เป็นบางส่วนได้
- ใช้ เธรดแบบขนานเพื่อประมวลผลไฟล์โดยเฉพาะอย่างยิ่งหากไฟล์มีขนาดใหญ่
- ปิดไฟล์หลังจากอ่าน: สิ่งนี้จะช่วยเพิ่มทรัพยากร
- ใช้ คำสั่ง try-with-resourcesเพื่อปิดไฟล์โดยอัตโนมัติหลังจากอ่านแล้ว เพื่อให้แน่ใจว่าไฟล์จะถูกปิดแม้ว่าจะมีข้อยกเว้นเกิดขึ้นในขณะที่อ่านก็ตาม
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.List;
public class FileReader {
public static void main(String[] args) {
try (BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ในตัวอย่างนี้ ออบเจ็กต์ BufferedReaderจะถูกสร้างขึ้นภายในคำสั่ง try-with-resources ซึ่งช่วยให้มั่นใจว่าจะถูกปิดโดยอัตโนมัติเมื่อออกจากบล็อก แม้ว่าจะมีข้อยกเว้นเกิดขึ้นก็ตาม ดังนั้น เมื่ออ่านไฟล์ขนาดใหญ่ใน Java วิธีที่ดีที่สุดคือใช้ตัวอ่านแบบบัฟเฟอร์ ขนาดบัฟเฟอร์ที่เล็กลง API การสตรีม สตรีมแบบขนาน และปิดไฟล์หลังจากอ่านแล้ว นอกจากนี้ การใช้ คำสั่ง try-with-resourcesสามารถช่วยให้แน่ใจว่าไฟล์ถูกปิดอย่างถูกต้องในกรณีที่มีข้อยกเว้น
วิธีเรียงลำดับรายการใน Java วิธีการเรียงลำดับรายการต่างๆ ใน Java
ที่มา: FreeCodeCamp โพสต์นี้ครอบคลุมวิธีการเรียงลำดับ รายการต่างๆใน Java: Collections.sort() , stream.sorted( ) และList.sort()
วิธีใช้เมธอด Collections.Sort() ใน Java
หนึ่งในวิธีทั่วไปในการจัดเรียงข้อมูลใน Java คือการใช้เมธอดCollections.sort() ตามค่าเริ่มต้น จะเรียงลำดับรายการจากน้อยไปหามาก ต่อไปนี้เป็นตัวอย่างการใช้ เมธอดCollections.sort()เพื่อเรียงลำดับรายการจำนวนเต็ม:import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(3);
numbers.add(1);
numbers.add(4);
numbers.add(2);
Collections.sort(numbers);
System.out.println("Sorted List: " + numbers);
}
}
โค้ดด้านบนจะสร้างรายการจำนวนเต็ม เพิ่มตัวเลขสี่ตัวลงไป เรียงลำดับรายการ จากนั้นพิมพ์รายการที่เรียงลำดับไปยังคอนโซล ใช้คลาสจาก Java Standard Library เพื่อดำเนินการ รวมถึงjava.util.Collections , java.util.Listและjava.util.ArrayList ผลลัพธ์มีดังต่อไปนี้:
//รายการเรียงลำดับเอาต์พุต: [1, 2, 3, 4]
คุณยังสามารถจัดเรียงรายการออบเจ็ ก ต์แบบกำหนดเองได้ โดยใช้ เมธอด Collections.sort() ในการดำเนินการนี้ คุณจะต้องสร้างตัวเปรียบเทียบและส่ง ผ่านเป็นอาร์กิวเมนต์ไปยังเมธอดCollections.sort() ตัวเปรียบเทียบคืออ็อบเจ็กต์ที่ใช้ อินเท อ ร์เฟซ java.util.Comparator มีเมธอด callable เดียวคือcomparison()ซึ่งเปรียบเทียบสองอ็อบเจ็กต์และส่งกลับจำนวนเต็มที่ระบุลำดับสัมพัทธ์ ต่อไปนี้คือตัวอย่างวิธีใช้เครื่องมือเปรียบเทียบเพื่อจัดเรียงรายการออบเจ็กต์ที่กำหนดเอง:
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
people.add(new Person("Charlie", 20));
Collections.sort(people, new PersonComparator());
System.out.println("Sorted List: " + people);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
class PersonComparator implements java.util.Comparator<Person> {
@Override
public int compare(Person a, Person b) {
return a.getAge() - b.getAge();
}
}
โค้ดที่แสดงด้านบนจะสร้างรายการ วัตถุ Personเพิ่ม วัตถุ Person หลายรายการลงในรายการ เรียงลำดับรายการโดยใช้ตัวเปรียบเทียบที่กำหนดเอง ( PersonComparator ) จากนั้นพิมพ์รายการที่เรียงลำดับ คลาสPersonมีสองฟิลด์ ได้แก่nameและageตลอดจนเมธอด getter สำหรับฟิลด์เหล่านี้ คลาสPersonComparatorใช้ อินเทอร์เฟซ Comparatorและแทนที่วิธีการเปรียบเทียบเพื่อเรียง ลำดับอ็อบเจ็กต์ Personตามอายุ ( age ) ผลลัพธ์ของโปรแกรมนี้จะเป็นดังนี้:
// รายการเรียงลำดับเอาท์พุท: [Charlie (20), Alice (25), Bob (30)]
เมธอดCollections.sort()เหมาะที่สุดเมื่อคุณมีคอลเลกชันของออบเจ็กต์ที่คุณต้องการจัดเรียงตามฟิลด์ตั้งแต่หนึ่งฟิลด์ขึ้นไป ตัวอย่างเช่น หากคุณมีคอลเลกชันของ ออบเจ็กต์ Employeeและต้องการจัดเรียงตามนามสกุล คุณสามารถใช้เมธอด Collections.sort()และส่งผ่านตัวเปรียบเทียบแบบกำหนดเองที่เปรียบเทียบนามสกุลของออบเจ็ กต์ Employee
วิธีการใช้เมธอด List.Sort() ใน Java
วิธีนี้จะเรียงลำดับรายการจากน้อยไปหามาก นี่คือวิธีการทำงาน:import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 2, 4, 1);
numbers.sort(null);
System.out.println(numbers); // prints [1, 2, 3, 4, 5]
}
}
ภายใน เมธอด หลักArrays.asListจะสร้างรายการจำนวนเต็มที่เรียกว่าตัวเลข จากนั้นโค้ดจะเรียงลำดับรายการตัวเลขนี้โดยใช้วิธีการเรียงลำดับเริ่มต้น เนื่องจากค่าnull จะ ถูกส่งผ่านไปยังวิธีการเรียงลำดับ ในที่สุด รายการที่เรียงลำดับจะถูกพิมพ์ไปยังคอนโซลโดยใช้เมธอดSystem.out.println เอาต์พุตคือ[1, 2, 3, 4, 5 ] List.sort()มีประโยชน์เมื่อคุณมีรายการองค์ประกอบที่ต้องเรียงลำดับ ตัวอย่างเช่น หากคุณมีรายการสตริงและต้องการเรียงลำดับตามตัวอักษร คุณสามารถใช้เมธอดList.sort() เพื่อทำสิ่ง นี้ List.sort()เป็นวิธีการอินสแตนซ์ของ คลาส Listและเรียงลำดับองค์ประกอบตามลำดับที่กำหนดโดยลำดับตามธรรมชาติหรือการ ใช้งาน Icomparer ที่กำหนด
วิธีใช้วิธี stream.sorted() ใน Java
ใน Java 8 และใหม่กว่า คุณสามารถใช้ Stream API เพื่อจัดเรียงรายการได้ มันมี วิธีการ เรียงลำดับซึ่งสามารถใช้เพื่อเรียงลำดับองค์ประกอบของกระแสข้อมูล ต่อไปนี้คือตัวอย่างวิธีจัดเรียงรายการจำนวนเต็มโดยใช้สตรีม:import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 2, 4, 1);
List<Integer> sortedList = numbers.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList); // prints [1, 2, 3, 4, 5]
}
}
อย่างที่คุณเห็น รายการตัวเลขจะถูกแปลงเป็นสตรีมโดยใช้เมธอดstream() จากนั้นจึงเรียกเมธอด sorted()เพื่อจัดเรียงองค์ประกอบในสตรีม collect(Collectors.toList())วิธีการใช้ในการรวบรวมองค์ประกอบที่เรียงลำดับกลับเข้าไปในรายการ ผลลัพธ์คือรายการใหม่ที่มีองค์ประกอบที่เรียงลำดับ เอาต์พุตคือ[1, 2, 3, 4, 5 ] stream.sorted()เหมาะที่สุดเมื่อคุณมีสตรีมขององค์ประกอบที่จำเป็นต้องเรียงลำดับ ตัวอย่างเช่น หากคุณมีสตรีมจำนวนเต็มและต้องการเรียงลำดับจากน้อยไปหามาก ควรใช้เมธอดstream.Sorted() สำหรับสิ่ง นี้
GO TO FULL VERSION