JavaRush /Java блог /Random UA /Кава-брейк #196. Як правильно читати файли в Java 8 і Jav...

Кава-брейк #196. Як правильно читати файли в Java 8 і Java 11. Як сортувати List в Java, різні методи сортування списків у Java

Стаття з групи Random UA

Як правильно читати файли в Java 8 та Java 11

Джерело: Medium Завдяки цьому посібнику ви дізнаєтеся кілька рекомендацій, корисних при обробці та читанні великих файлів у Java 8 і Java 11. Кава-брейк #196.  Як правильно читати файли в Java 8 і Java 11. Як сортувати List в Java, різні методи сортування списків у Java - 1 Прочитати файл, який знаходиться на диску вашого комп'ютера, на Java досить просто. У Java 8 і пізніших версіях ви можете використовувати клас Files . Він входить у пакет java.nio.file , який вперше був представлений у Java 7 для забезпечення більш ефективного способу роботи з файлуми та каталогами. Нижче наведено приклад того, як ви можете використовувати клас Files для читання файлу Java 8.
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() використовується для створення об'єкта Path , що представляє файл. Також ви можете використовувати 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 важливо врахувати деякі рекомендації:
  1. Використовуйте буферизований рідер . Він дозволяє читати великі шматки даних за один раз, а не читати по одному символу або по одному рядку за один раз.
  2. Використовуйте менший розмір буфера : при використанні зчитувача з буферизацією менший розмір буфера допоможе скоротити використання пам'яті.
  3. Використовуйте streaming API . Замість завантаження всього файлу в пам'ять потоковий API дозволяє читати файл частинами.
  4. Для обробки файлу використовуйте паралельний потік , особливо якщо файл великий.
  5. Закривайте файл після прочитання: це допоможе звільнити ресурси.
  6. Використовуйте оператор try-with-resources , щоб автоматично закрити файл після його читання. Це гарантує, що файл буде закритий, навіть якщо під час його читання виникне виняток.
Нижче наведено приклад використання оператора 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 може допомогти забезпечити правильне закриття файлу у разі виключення.

Як сортувати List Java. Різні методи сортування списків у Java

Джерело: FreeCodeCamp У даній публікації розглянуті різні методи сортування List Java: Collections.sort() , stream.sorted() і List.sort() . Кава-брейк #196.  Як правильно читати файли в Java 8 і Java 11. Як сортувати List в Java, різні методи сортування списків у Java - 2Іноді дані необхідно розташувати у певному порядку, щоб їх було легше зрозуміти, знайти та обробити. Ми називаємо цей процес сортуванням. За допомогою сортування можна впорядкувати дані не лише в певному порядку, а й згідно з критеріями: наприклад, за типом даних, включаючи числа, рядки та об'єкти. Мова Java має вбудовані методи сортування, наприклад, у класах Collections . Сортування даних у Java часто застосовується у програмах електронної комерції, де користувачеві необхідно відобразити список продуктів. Товари можна сортувати різними способами, залежно від вимог, які встановлює користувач, таких як ціна, рейтинг, бренд і так далі. Наприклад, якщо користувач хоче побачити всі продукти, відсортовані за ціною в порядку зростання, програма може використовувати алгоритм сортування, щоб упорядкувати продукти в цьому порядку. Таким чином, коли користувач переглядає продукти, він зможе спочатку побачити найдешевші продукти та ухвалити відповідне рішення про покупку.

Як використовувати метод Collections.Sort() в Java

Одним з найбільш поширених способів сортування даних Java є використання методу Collections.sort() . За умовчанням, він сортує список у порядку зростання. Ось приклад використання методу Collections.sort() для сортування списку цілих чисел (integers):
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, у тому числі java.util.Collections , java.util.List та java.util.ArrayList . На висновку отримуємо наступне:
//Output Sorted List: [1, 2, 3, 4]
За допомогою методу Collections.sort() ви також можете відсортувати список об'єктів користувача. Для цього вам потрібно буде створити компаратор і передати його як аргумент методу Collections.sort() . Компаратор – це об'єкт, що реалізує інтерфейс java.util.Comparator . У нього є єдиний метод compare() , що викликається, який порівнює два об'єкти і повертає ціле число, що вказує їх відносний порядок. Ось приклад того, як використовувати компаратор для сортування списку об'єктів користувача:
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 , а також гетер-методи для цих полів. Клас PersonComparator реалізує інтерфейс Comparator і перевизначає метод порівняння сортування об'єктів Person за віком ( age ). Висновок цієї програми буде таким:
//output Sorted List: [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]
    }
}
Всередині методу main за допомогою Arrays.asList створюється список цілих чисел, званих numbers . Потім код сортує цей список чисел, використовуючи метод сортування за умовчанням, оскільки метод сортування передається null . Нарешті відсортований список виводиться на консоль за допомогою методу System.out.println . На висновку отримуємо [1, 2, 3, 4, 5] . List.sort() корисний, коли у вас є список елементів, які потрібно відсортувати. Наприклад, якщо у вас є список рядків і ви хочете відсортувати їх в алфавітному порядку, ви можете використовувати метод List.sort() . List.sort() є методом екземпляра класу List і сортує елементи в порядку, що визначається їх природним порядком або заданою реалізацією Icomparer .

Як використовувати метод stream.sorted() в Java

У Java 8 і пізніших версіях для сортування списку можна використовувати Stream API. Він надає метод sorted , який можна використовувати для сортування елементів потоку. Ось приклад того, як сортувати список цілих чисел за допомогою потоку:
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() .

Висновок

З цього посібника ви дізналися, що існує кілька способів сортування списку Java — метод Collections.sort() , метод stream.sorted() і метод List.sort() . Який із цих методів краще використовувати, залежить від конкретних вимог поставленого завдання. Я сподіваюся, що ця стаття дала вам правильну інформацію про сортування списку в Java. Вдалого кодування!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ