Всем привет!) Столкнулась с проблемой... Моя небольшая голова все никак не может придумать, как можно отфильтровать один стрим одного типа по другому другого типа. Если конкретнее, то - я пишу симулятор лифта, один Stream у меня Integer, второй Passenger. Stream<Integer>
представляет из себя последовательность заявок. Мне нужно отфильтровать этот стрим так, чтобы к пассажирам, которые уже вошли в кабину(boolean isEntered), лифт не ехал, но если уж он их забрал, то необходимо доехать до этажа конечной остановки. Тоесть, from откинуть, а to оставить. Что-то типа такого:
stations = stations.stream().filter(station -> passengers.stream().flatMap(p -> Stream.of((if !p.isEtered)p.getDepature, (and required)p.getDestination)));
Как-то так. Криво конечно, но совсем не знаю как это можно провернуть. Помогите, пожалуйста :3
Насколько я понимаю, вам нужно что-то такое
Set<Integer> stops = Stream.concat(
passengers.stream().filter(x -> !x.isEntered()).map(Passenger::getDeparture),
passengers.stream().map(Passenger::getDestination)
).collect(Collectors.toSet());
Stream<Integer> result = stations.stream().filter(stops::contains);
Думаю что-нибудь такое. Накидал так как представил по вашему разъяснению задачу.
class App {
public static void main(String[] args) {
List<Integer> stations = Arrays.asList(1, 2, 3, 4, 5);
App outer = new App();
List<Passenger> passengers = new ArrayList<>();
passengers.add(outer.new Passenger(1));
passengers.add(outer.new Passenger(2));
passengers.add(outer.new Passenger(3));
passengers.add(outer.new Passenger(4));
System.out.println(passengers);
List<Integer> newStations =
stations.stream()
.filter(
station ->
passengers.stream().anyMatch(p -> !p.isEntered() && p.departure == station))
.collect(Collectors.toList());
System.out.println(newStations);
}
public class Passenger {
private Integer number;
private Integer departure;
private Integer destination;
private Boolean entered;
public Passenger(Integer number) {
this.departure = (int) (Math.random() * 5) + 1;
this.destination = (int) (Math.random() * 5) + 1;
this.entered = false;
this.number = number;
}
public Integer getDepature() {
return this.departure;
}
public Integer getDestination() {
return this.destination;
}
public Boolean isEntered() {
return entered;
}
public void setEntered(Boolean entered) {
this.entered = entered;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String toString() {
return "number = "
+ this.number
+ " departure = "
+ this.departure
+ " destination = "
+ this.destination
+ " entered = "
+ this.entered;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Доброго времени)) Имеется модуль AВ нем в тестовых директориях лежат тестовые сущности (не тесты)
Пытаюсь изучать разработку web приложений на JavaПопробовал TomCat, с ним проблем не возникло, вот только это не полноценный сервер, а хотелось...
Есть CSV file с даними и разделителем кома между столбцамиCsv file прикреплен ниже Нужно по группировать эти данные и сгенерировать новый CSV file в таком...