반응형
조건과 일치하는 스트림의 첫 번째 요소를 가져옵니다.
스트림의 조건과 일치하는 첫 번째 요소를 가져오려면 어떻게 해야 합니까?해봤는데 안 되네
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
이 조건은 동작하지 않습니다.필터 메서드는 Stop 이외의 클래스에서 호출됩니다.
public class Train {
private final String name;
private final SortedSet<Stop> stops;
public Train(String name) {
this.name = name;
this.stops = new TreeSet<Stop>();
}
public void addStop(Stop stop) {
this.stops.add(stop);
}
public Stop getFirstStation() {
return this.getStops().first();
}
public Stop getLastStation() {
return this.getStops().last();
}
public SortedSet<Stop> getStops() {
return stops;
}
public SortedSet<Stop> getStopsAfter(String name) {
// return this.stops.subSet(, toElement);
return null;
}
}
import java.util.ArrayList;
import java.util.List;
public class Station {
private final String name;
private final List<Stop> stops;
public Station(String name) {
this.name = name;
this.stops = new ArrayList<Stop>();
}
public String getName() {
return name;
}
}
이것은, 고객이 찾고 있는 것이기도 합니다.
yourStream
.filter(/* your criteria */)
.findFirst()
.get();
그리고 더 좋은 것은, 만약 어떤 요소도 일치하지 않을 가능성이 있다면, 이 경우get()
NPE를 던집니다.사용방법:
yourStream
.filter(/* your criteria */)
.findFirst()
.orElse(null); /* You could also create a default object here */
An example:
public static void main(String[] args) {
class Stop {
private final String stationName;
private final int passengerCount;
Stop(final String stationName, final int passengerCount) {
this.stationName = stationName;
this.passengerCount = passengerCount;
}
}
List<Stop> stops = new LinkedList<>();
stops.add(new Stop("Station1", 250));
stops.add(new Stop("Station2", 275));
stops.add(new Stop("Station3", 390));
stops.add(new Stop("Station2", 210));
stops.add(new Stop("Station1", 190));
Stop firstStopAtStation1 = stops.stream()
.filter(e -> e.stationName.equals("Station1"))
.findFirst()
.orElse(null);
System.out.printf("At the first stop at Station1 there were %d passengers in the train.", firstStopAtStation1.passengerCount);
}
출력:
At the first stop at Station1 there were 250 passengers in the train.
람다 식을 쓸 때 왼쪽 인수 리스트는->
는 괄호 안의 인수 목록(빈칸) 또는 괄호 없는 단일 ID 중 하나입니다.그러나 두 번째 양식에서는 식별자를 유형 이름으로 선언할 수 없습니다.다음과 같이 됩니다.
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
구문이 올바르지 않습니다.
this.stops.stream().filter((Stop s)-> s.getStation().getName().equals(name));
정답입니다.또는 다음 중 하나를 선택합니다.
this.stops.stream().filter(s -> s.getStation().getName().equals(name));
컴파일러가 유형을 파악하는 데 충분한 정보를 가지고 있는 경우에도 해당됩니다.
이게 가장 좋은 방법인 것 같아요.
this.stops.stream().filter(s -> Objects.equals(s.getStation().getName(), this.name)).findFirst().orElse(null);
언급URL : https://stackoverflow.com/questions/22940416/fetch-first-element-of-stream-matching-the-criteria
반응형
'programing' 카테고리의 다른 글
printf에서 '%p'은 어디에 유용합니까? (0) | 2022.07.26 |
---|---|
커스텀 컴포넌트 내에서 Vue.js 플러그인을 사용하는 방법 (0) | 2022.07.26 |
vuex 저장소에 바인딩된 Vue 3 확인란이 선택 해제된 후 확인되지 않음 (0) | 2022.07.18 |
Ubuntu에서 화살표 키를 누르면 단말기에 "^[A" "^[B" "^[C" "^[D"" 가 표시되는 이유는 무엇입니까? (0) | 2022.07.18 |
Vue CLI 프로젝트가 vue.config.js를 읽지 않음 (0) | 2022.07.18 |