- Не забывайте про дедлайны
- Почему-то мало решений задач после дедлайна 3 марта
- Каталог
outне должен быть в репозитории. файлы там: занимают место, изменяются при каждом commit, не нужны, их можно заново сделать из кода. Удалите out, добавьте в.gitignore.
Примеры использования лямбда выражений
Пример 1, описание оформления списка
Сделаем функцию printList, которая печатает построчно содержимое числового списка, при этом как печатать число указано с помощью функции (лямбда-выражения):
List<Integer> ints = List.of(3, 5, 6);
printList(ints, x -> "!" + x);
Результатом должно быть:
!3
!5
!6
А printList(ints, x -> "*".repeat(x)) выведет:
***
*****
******
Реализация:
public interface NumbersDisplayer {
String display(int x);
}
public class ListPrinter {
public static void main(String[] args) {
List<Integer> ints = List.of(3, 5, 6);
printList(ints, x -> "!" + x);
printList(ints, x -> "*".repeat(x));
//аналогично предыдущему, но здесь
//метод repeat объекта "*" преобразован в лямбда-варажение
printList(ints, "*"::repeat);
}
private static void printList(List<Integer> ints, NumbersDisplayer nd) {
for (int i : ints)
System.out.println(nd.display(i));
}
// Часто можно не создавать свой интерфейс, а пользоваться одним из существующих
private static void printList2(List<Integer> ints, Function<Integer, String> nd) {
for (int i : ints)
System.out.println(nd.apply(i));
}
}
Сортировка массивов (списков)
Если у вас есть массив или список каких-то объектов, которые сравниваются особым образом, чтобы отсортировать такой массив или список, необходимо понятие компаратора (сравнивателя), он по двум объектам говорит, какой из них больше. По-умолчанию, в Java при сортировке строк они сравниваются по алфавиту, т.е. сначала по первой букве, потом по второй и т.д. Если хочется сравнивать строки по длине, нужен компаратор именно для такого сравнения.
Компаратор — это объект с методом compare:
int compare(String s1, String s2), получает два объекта, возвращает 0 — означает равенство объектов. Положительное число — первый больше, отрицательное — первый меньше.
class SortExamples {
public static void main(String[] args) {
List<Integer> list1 = List.of(40, 10, 30, 50, 24);
list1.
}
}
Графический интерфейс в Java
Интерфейс с окнами, кнопками, другими элементами управления. Большинство программ с интерфейсом сейчас разрабывается для web. Т.е. это HTML/CSS/JS. Кроме этого интерфейсы делаются для мобильных платформ Android, iOS. А для десктопа интерфейсы делают редко. И Java не самый популярный язык для создания таких интерфейсов. Но, Java удобна для этой цели, имеет хорошую современную библиотеку JavaFX. Концептуально она похожа и на Web (имеет язык FXML ~ HTML, CSS), и на Android.
Ранее в Java были библиотеки AWT, ее заменила Swing. Самый известный пример Swing-приложения — это IntelliJ IDEA. Но вообще на Swing не очень просто делать интерфейсы с нестандартными элементами. Сейчас всё это заменила JavaFX, хотя Swing будет поддерживаться и дальше, Swing включен в Java SDK.
До Java 1.8 JavaFX тоже входила в SDK, сейчас это отдельная библиотека, ее нужно отдельно скачивать, подключать к проекту.
Внешний вид приложений JavaFX, Swing, AWT. Эти фреймворки сами рисуют интерфейс. Внешний вид, например, кнопки полностью создаётся библиотекой. Преимущества: - программы выглядят одинаково независимо от платформы, где запущены. Недостаток: 1) пользователю непривычный вид интерфейса может казаться чуждым. 2) это медленнее, чем если пользоваться встроенными в операционную систему элементами интерфейса. Если очень нужно, можно настраивать внешний вид элементов интерфрейса и делать его похожим на Windows, IOS, …
Установка библиотеки.
https://openjfx.io
Нужно скачать zip архив, распаковать в какое-то место, где вы его найдете.
Если это каталог проекта, добавьте в .gitignore
Настраиваем проект, выбираем меню File -> Project Structure -> добавляем папку lib как библиотеку.
Добавляем в проект в самый корень (каталог src) файл module-info.java:
module ru.spbu.arts.javafx {
requires javafx.base; // другие модули, которые используем
requires javafx.graphics;
requires javafx.controls;
//разрешаем библиотеке javafx исследовать содержимое нашего пакета с кодом
opens ru.spbu.arts.javafx;
}
Минимальный пример программы JavaFXExample