Bagaimana cara mendapatkan elemen pertama yang cocok dengan kriteria dalam aliran? Saya sudah mencoba ini tetapi tidak berhasil
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Kriteria tersebut tidak berfungsi, metode filter dipanggil di kelas selain 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;
}
}
java
java-8
java-stream
pengguna2147674
sumber
sumber
.findFirst().orElse(yourBackUpGoesHere);
. Itu juga bisa menjadi nol.findFirst().orElse(null);
findFirst()
mengembalikan objek Opsional ( JavaDoc ), yang mungkin kosong. Dalam hal ini panggilan keget()
akan melempar NPE. Untuk mencegah hal itu terjadi, gunakanorElse()
sebagai gantiget()
dan berikan objek fallback (sepertiorElse(new Station("dummy", -1)
), atau simpan hasil darifindFirst()
dalam variabel dan periksa denganisEmpty()
sebelum memanggilget()
Saat Anda menulis ekspresi lambda, daftar argumen di sebelah kiri
->
dapat berupa daftar argumen yang diberi tanda kurung (mungkin kosong), atau pengenal tunggal tanpa tanda kurung apa pun. Namun dalam bentuk kedua, pengidentifikasi tidak dapat dideklarasikan dengan nama tipe. Jadi:adalah sintaks yang salah; tapi
benar. Atau:
juga benar jika kompilator memiliki cukup informasi untuk mengetahui jenisnya.
sumber
s
untuk digunakan dengan lambda? Ini tidak benar-benar terlihat seperti kesalahan bagi saya, tetapi saya tampaknya tidak menggunakan kompiler yang sama seperti Anda.findFirst().get()
diterapkan setelahfilter
), dan saya tidak mendapatkan kesalahan apa pun. Contoh ketiga juga berhasil untuk saya.Saya pikir ini cara terbaik:
sumber