Другие языки программирования и технологии

Программирование на джава

Здравствуйте нужна ваша помощь нужно Реализовать класс Student, полями которого являются:

private String name;
private Optional<Address> address;



Пропишите два конструктора (первый от имени и адреса, второй только от имени) и геттеры для полей.

Реализуйте класс Address, полями которого являются:

private String city;


private String region;



Пропишите конструктор и геттеры.

В классе Main создайте метод printStudentInfo(Student student), который выводит информацию о студенте. Если адрес студента не указан, то должно выводиться только имя. Создайте несколько студентов, используя оба конструктора, и протестируйте этот метод.



2) Создайте список произвольных слов. С помощью StreamAPI и метода reduce объедините слова в предложение. Выведите первоначальный список и полученное предложение в консоль.
Bladimir Apatzidi
Bladimir Apatzidi
81
Optional хранить в полях классов - плохая практика. Хранить нужно саму ссылку на объект, а в Optional и обратно преобразовывать в методах, если нужно. Если ты хранишь в объекте монаду, то придётся дублировать и все её методы доступа (map, flatMap, filter, orElse и т.д.). Мне-то не жалко написать по условию, но если что, я предупреждал.

Геттеры и стандартные конструкторы руками пишут только люди, застрявшие в нулевых годах или живущие втиранием очков заказчику многословным кодом. Нормальные разработчики подключают lombok, который всю кухню генерит по аннотации.

Например, файл Student.java будет выглядеть так:
 package lab;

import lombok.Value;
import java.util.Optional;

@Value
public class Student {
String name;
Optional address;

public Student(String n, Address a) {
this.name = n;
this.address = Optional.ofNullable(a);
}

public Student(String n) {
this(n, null);
}
}
А файл Address.java - так:
 package lab;

import lombok.value;

@Value
class Address {
String city;
String region;
}

Аннотация lombok.Value автоматом сделает все поля приватными и финальными, сгенерирует конструктор на и геттеры на все поля, т.е. класс будет иметь семантику значения. Поскольку в условии не сказано, что нужны сеттеры, это будет в самый раз.

Если всё же понадобится менять значения полей, замени аннотацию на lombok.Data.

Основной класс Main.java:
 package lab;

import lombok.val;

public class Main {
public static void Main(String[] args) {
val a = new Address("xxx", "rrr");
val s1 = new Student("zzz", a);
val s2 = new Student("www");
printStudentInfo(s1);
printStudentInfo(s2);
}

private static printStudentInfo(Student s) {
System.out.println(
s.getName() + ": " +
s.getAddress()
.map(a -> a.getCity() + " из " + a.getRegion())
.orElse("БОМЖ")
);
}
}

Всё это должно лежать в папке с названием lab. Имя пакета и папки подправь, как тебе нужно. И населённые пункты с именами студентов сам придумай, я не люблю фантазировать.

А вторая задача вообще никак не связана с первой. Так что - публикуй отдельным вопросом.
СД
Саня Дмитроченков
54 053
Лучший ответ