- Не забывайте про дедлайны
- Почему-то мало решений задач после дедлайна 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