Дано на текущий момент 3 класса и интерфейс
public interface Sendable<T> {
String getTo();
String getFrom();
T getContent();
}
public class MailService<T> implements Consumer<Sendable<T>> {
Map<String, List<T>> mailBox;
public Map<String, List<T>> getMailBox() {
mailBox = new HashMap<String, List<T>>() {
@Override
public List<T> get(Object key) {
return super.getOrDefault(key, new LinkedList<T>());
}
};
return mailBox;
}
@Override
public void accept(Sendable<T> sendable) {
List<T> list = new ArrayList<>();
list.add(sendable.getContent());
mailBox.put(sendable.getTo(),list);
}
}
public class MailMessage<T> implements Sendable{
private String message;
private String to;
private String from;
public MailMessage(String to, String from, String message) {
this.to = to;
this.from = from;
this.message = message;
}
@Override
public String getTo() {
return to;
}
@Override
public String getFrom() {
return from;
}
@Override
public String getContent() {
return message;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null) {
return false;
}
if (getClass() != o.getClass()) {
return false;
}
if (!super.equals(0)) {
return false;
}
final MailMessage<?> other = (MailMessage<?>) o;
if (!Objects.equals(this.message, other.message)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 31 * hash + Objects.hash(super.hashCode(), message);
return hash;
}
}
public class Solution {
public static void main(String[] args) {
// Random variables
String randomFrom = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно.
String randomTo = "..."; // Некоторая случайная строка. Можете выбрать ее самостоятельно.
int randomSalary = 100; // Некоторое случайное целое положительное число. Можете выбрать его самостоятельно.
// Создание списка из трех почтовых сообщений.
MailMessage firstMessage = new MailMessage(
"Robert Howard",
"H.P. Lovecraft",
"This \"The Shadow over Innsmouth\" story is real masterpiece, Howard!"
);
assert firstMessage.getFrom().equals("Robert Howard") : "Wrong firstMessage from address";
assert firstMessage.getTo().equals("H.P. Lovecraft") : "Wrong firstMessage to address";
assert firstMessage.getContent().endsWith("Howard!") : "Wrong firstMessage content ending";
MailMessage secondMessage = new MailMessage(
"Jonathan Nolan",
"Christopher Nolan",
"Брат, почему все так хвалят только тебя, когда практически все сценарии написал я. Так не честно!"
);
MailMessage thirdMessage = new MailMessage(
"Stephen Hawking",
"Christopher Nolan",
"Я так и не понял Интерстеллар."
);
List<MailMessage> messages = Arrays.asList(
firstMessage, secondMessage, thirdMessage
);
for (MailMessage s : messages) {
System.out.println(s.getFrom() + " " + s.getTo() + " " + s.getContent());
}
// Создание почтового сервиса.
MailService<String> mailService = new MailService<>();
// Обработка списка писем почтовым сервисом
messages.stream().forEachOrdered(mailService);
/*
// Получение и проверка словаря "почтового ящика",
// где по получателю можно получить список сообщений, которые были ему отправлены
Map<String, List<String>> mailBox = mailService.getMailBox();
assert mailBox.get("H.P. Lovecraft").equals(
Arrays.asList(
"This \"The Shadow over Innsmouth\" story is real masterpiece, Howard!"
)
): "wrong mailService mailbox content (1)";
assert mailBox.get("Christopher Nolan").equals(
Arrays.asList(
"Брат, почему все так хвалят только тебя, когда практически все сценарии написал я. Так не честно!",
"Я так и не понял Интерстеллар."
)
): "wrong mailService mailbox content (2)";
assert mailBox.get(randomTo).equals(Collections.<String>emptyList()): "wrong mailService mailbox content (3)";
ВОПРОС что я делаю неправильно и почему идет ошибка в этой строке :
messages.stream().forEachOrdered(mailService);
Required type: Consumer<? super MailMessage>
Provided: MailService <String>
Я уже совсем не знаю, что сделать дабы заставить эту строку работать ....
messages.stream().forEach(mailService::accept); - работает. Но эту строку надо оставить в неизменном виде ... т.е. .forEachOrdered(mailService)
Попробуйте сделать так:
messages.stream().forEachOrdered(new Consumer<MailMessage>() {
@Override
public void accept(MailMessage mailMessage) {
mailService.accept(mailMessage);
}
});
И вот эту строку:
public class MailMessage<T> implements Sendable{
Следует заменить на эту:
public class MailMessage<T> implements Sendable<T> {
messages.stream().forEachOrdered(t -> mailService.accept(t)); - может так попробовать?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
По нажатии на кнопку хочу создать одно диалоговое окноВот код класса
Spring-приложение, использующее jpa-repository, oracle и развернутое на was85
В чем может быть ошибка? Собираю проект apk через maven