chore: organize homework into first-part directory

This commit is contained in:
user
2026-09-12 17:46:39 +04:00
parent cd4bc632ed
commit 58459cc92b
80 changed files with 0 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
# Emacs/vim
*~
*.swp
# VSCode
.vscode
.classpath
.project
.settings/
# MacOS
.DS_Store
# CS56 specific: Secrets files
localhost.json
heroku.json
# Maven (from: https://github.com/github/gitignore/blob/master/Maven.gitignore)
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar
# Java (from: https://github.com/github/gitignore/blob/master/Java.gitignore)
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
+29
View File
@@ -0,0 +1,29 @@
# Homework 02
1. Создать класс Student, обязательное поле класса Student - List<Book> (минимум по 5 книг у каждого)
2. Создать текстовый файл со студентами и книгами
3. При помощи внутренних фреймворков и библиотек для ввода-вывода информации в Java считать содержимое файла и заполнить List<Student> этими данными (Должен быть реализован механизм заполнения коллекции студентов из текстового файла)
4. При помощи одного (не допускается объявления никаких промежуточных переменных, совсем никаких) стрима:
Вывести в консоль каждого студента (переопределите toString)
Получить для каждого студента список книг
Получить книги
Отсортировать книги по количеству страниц (Не забывайте про условия для сравнения объектов)
Оставить только уникальные книги
Отфильтровать книги, оставив только те, которые были выпущены после 2000 года
Ограничить стрим на 3 элементах
Получить из книг годы выпуска
При помощи методов короткого замыкания (почитайте самостоятельно что это такое) вернуть Optional от года
При помощи методов получения значения из Optional вывести в консоль год выпуска найденной книги, либо запись о том, что такая книга отсутствует
+1
View File
@@ -0,0 +1 @@
xargs img2pdf -o result.pdf < order.txt
@@ -0,0 +1,10 @@
Book{author='Ggg Ggg', title='Book Ggg', publishYear=2005, pageCount=100}
Book{author='Bbb Bbb', title='Book Bbb', publishYear=2018, pageCount=200}
Book{author='Ddd Ddd', title='Book Ddd', publishYear=2015, pageCount=400}
Book{author='Aaa Aaa', title='Book Aaa', publishYear=2027, pageCount=500}
Book{author='Iii Iii', title='Book Iii', publishYear=2012, pageCount=600}
Book{author='Hhh Hhh', title='Book Hhh', publishYear=2021, pageCount=800}
Book{author='Ccc Ccc', title='Book Ccc', publishYear=2024, pageCount=900}
Book{author='Jjj Jjj', title='Book Jjj', publishYear=2001, pageCount=1000}
Book{author='Lll Lll', title='Book Lll', publishYear=2025, pageCount=1100}
Book{author='Fff Fff', title='Book Fff', publishYear=2030, pageCount=1200}
@@ -0,0 +1,48 @@
❮ mvn exec:java -Dexec.mainClass="com.example.App" > output.txt
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.example:student-reader >---------------------
[INFO] Building student-reader 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec:3.6.3:java (default-cli) @ student-reader ---
Student{
name='Aaa'
surname='Bbb'
books=
Book{author='Aaa Aaa', title='Book Aaa', publishYear=2027, pageCount=500}
Book{author='Bbb Bbb', title='Book Bbb', publishYear=2018, pageCount=200}
Book{author='Ccc Ccc', title='Book Ccc', publishYear=2024, pageCount=900}
Book{author='Ddd Ddd', title='Book Ddd', publishYear=2015, pageCount=400}
Book{author='Ddd Ddd', title='Book Ddd', publishYear=2015, pageCount=400}
}
Student{
name='Ccc'
surname='Ddd'
books=
Book{author='Eee Eee', title='Book Eee', publishYear=1999, pageCount=300}
Book{author='Fff Fff', title='Book Fff', publishYear=2030, pageCount=1200}
Book{author='Ggg Ggg', title='Book Ggg', publishYear=2005, pageCount=100}
Book{author='Hhh Hhh', title='Book Hhh', publishYear=2021, pageCount=800}
Book{author='Iii Iii', title='Book Iii', publishYear=2012, pageCount=600}
}
Student{
name='Eee'
surname='Fff'
books=
Book{author='Aaa Aaa', title='Book Aaa', publishYear=2027, pageCount=500}
Book{author='Bbb Bbb', title='Book Bbb', publishYear=2018, pageCount=200}
Book{author='Jjj Jjj', title='Book Jjj', publishYear=2001, pageCount=1000}
Book{author='Kkk Kkk', title='Book Kkk', publishYear=1995, pageCount=700}
Book{author='Lll Lll', title='Book Lll', publishYear=2025, pageCount=1100}
}
Год выпуска: 2005
Выполнение программы завершено
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.025 s
[INFO] Finished at: 2026-08-06T23:30:03+04:00
[INFO] ------------------------------------------------------------------------
+7
View File
@@ -0,0 +1,7 @@
"screenshots/Screenshot from 2026-08-06 23-28-36.png"
"screenshots/Screenshot from 2026-08-06 23-29-11.png"
"screenshots/Screenshot from 2026-08-06 23-29-31.png"
"screenshots/Screenshot from 2026-08-06 23-52-39.png"
"screenshots/Screenshot from 2026-08-06 23-35-03.png"
"screenshots/Screenshot from 2026-08-06 23-26-45.png"
"screenshots/Screenshot from 2026-08-06 23-31-03.png"
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

+39
View File
@@ -0,0 +1,39 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>student-reader</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>student-reader</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.20.0</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
</project>
@@ -0,0 +1,71 @@
package com.example;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Year;
import java.util.Comparator;
import java.util.List;
public class App {
public static void main(String[] args) {
try {
Path studentsJsonFile = Path.of("students.json");
List<Student> students = StudentReader.read(studentsJsonFile);
// Условие использования одного stream сохраняется
students.stream()
// Вывести в консоль каждого студента (переопределите toString)
.peek(System.out::println)
// Получить для каждого студента список книг
.map(s -> s.getBooks()) // Stream<List<Book>>
// Получить книги
.flatMap(List::stream) // Stream<Book>;
// Oтсортировать книги по количеству страниц (Не забывайте про условия для сравнения
// объектов)
.sorted(Comparator.comparingInt(Book::getPageCount))
// Оставить только уникальные книги
.distinct()
// Отфильтровать книги, оставив только те, которые были выпущены после 2000 года
.filter(b -> b.getPublishYear().isAfter(Year.of(2000)))
// Ограничить стрим на 3 элементах
.limit(3)
// Получить из книг годы выпуска
.map(Book::getPublishYear)
// При помощи методов короткого замыкания (почитайте самостоятельно что это такое) вернуть
// Optional от года
.findFirst()
// При помощи методов получения значения из Optional вывести в консоль год выпуска
// найденной книги, либо запись о том, что такая книга отсутствует
.ifPresentOrElse(
year -> System.out.println("Год выпуска: " + year),
() -> System.out.println("Подходящая книга отсутствует"));
} catch (IOException e) {
System.err.println("Сударь, вы передали неправильный файл!");
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
System.err.println("Ну тут мои полномочии всё!");
e.printStackTrace();
System.exit(1);
}
System.out.println("Выполнение программы завершено");
}
}
@@ -0,0 +1,72 @@
package com.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.Year;
import java.util.Objects;
public class Book {
@JsonCreator
public Book(
@JsonProperty("author") String author,
@JsonProperty("title") String title,
@JsonProperty("publishYear") Year publishYear,
@JsonProperty("pageCount") int pageCount) {
this.author = author;
this.title = title;
this.publishYear = publishYear;
this.pageCount = pageCount;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Book book)) {
return false;
}
return pageCount == book.pageCount
&& author.equals(book.author)
&& title.equals(book.title)
&& publishYear.equals(book.publishYear);
}
@Override
public int hashCode() {
return Objects.hash(author, title, publishYear, pageCount);
}
@Override
public String toString() {
return "Book{"
+ "author='"
+ author
+ '\''
+ ", title='"
+ title
+ '\''
+ ", publishYear="
+ publishYear
+ ", pageCount="
+ pageCount
+ '}';
}
public int getPageCount() {
return pageCount;
}
public Year getPublishYear() {
return publishYear;
}
private final String author;
private final String title;
private final Year publishYear;
private final int pageCount;
}
@@ -0,0 +1,47 @@
package com.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
public class Student {
@JsonCreator
public Student(
@JsonProperty("name") String name,
@JsonProperty("surname") String surname,
@JsonProperty("books") List<Book> books) {
this.name = name;
this.surname = surname;
this.books = List.copyOf(books);
}
@Override
public String toString() {
StringBuilder booksString = new StringBuilder();
for (Book book : books) {
booksString.append("\n ").append(book);
}
return "Student{\n"
+ " name='"
+ name
+ "'\n"
+ " surname='"
+ surname
+ "'\n"
+ " books="
+ booksString
+ "\n}";
}
public List<Book> getBooks() {
return books;
}
private final String name;
private final String surname;
private final List<Book> books;
}
@@ -0,0 +1,20 @@
package com.example;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
public final class StudentReader {
public static List<Student> read(Path path) throws IOException {
return MAPPER.readValue(path.toFile(), new TypeReference<List<Student>>() {});
}
private StudentReader() {}
private static final ObjectMapper MAPPER =
new ObjectMapper().registerModule(new JavaTimeModule());
}
@@ -0,0 +1,110 @@
[
{
"name": "Aaa",
"surname": "Bbb",
"books": [
{
"author": "Aaa Aaa",
"title": "Book Aaa",
"publishYear": "2027",
"pageCount": 500
},
{
"author": "Bbb Bbb",
"title": "Book Bbb",
"publishYear": "2018",
"pageCount": 200
},
{
"author": "Ccc Ccc",
"title": "Book Ccc",
"publishYear": "2024",
"pageCount": 900
},
{
"author": "Ddd Ddd",
"title": "Book Ddd",
"publishYear": "2015",
"pageCount": 400
},
{
"author": "Ddd Ddd",
"title": "Book Ddd",
"publishYear": "2015",
"pageCount": 400
}
]
},
{
"name": "Ccc",
"surname": "Ddd",
"books": [
{
"author": "Eee Eee",
"title": "Book Eee",
"publishYear": "1999",
"pageCount": 300
},
{
"author": "Fff Fff",
"title": "Book Fff",
"publishYear": "2030",
"pageCount": 1200
},
{
"author": "Ggg Ggg",
"title": "Book Ggg",
"publishYear": "2005",
"pageCount": 100
},
{
"author": "Hhh Hhh",
"title": "Book Hhh",
"publishYear": "2021",
"pageCount": 800
},
{
"author": "Iii Iii",
"title": "Book Iii",
"publishYear": "2012",
"pageCount": 600
}
]
},
{
"name": "Eee",
"surname": "Fff",
"books": [
{
"author": "Aaa Aaa",
"title": "Book Aaa",
"publishYear": "2027",
"pageCount": 500
},
{
"author": "Bbb Bbb",
"title": "Book Bbb",
"publishYear": "2018",
"pageCount": 200
},
{
"author": "Jjj Jjj",
"title": "Book Jjj",
"publishYear": "2001",
"pageCount": 1000
},
{
"author": "Kkk Kkk",
"title": "Book Kkk",
"publishYear": "1995",
"pageCount": 700
},
{
"author": "Lll Lll",
"title": "Book Lll",
"publishYear": "2025",
"pageCount": 1100
}
]
}
]