は、いくつかのいずれかがこれを説明してもらえ:いくつか説明してください。Date maxDate = list.stream()。map(u - > u.date).max(Date :: compareTo).get();
Date maxDate = list.stream().map(u -> u.date).max(Date::compareTo).get();
は、いくつかのいずれかがこれを説明してもらえ:いくつか説明してください。Date maxDate = list.stream()。map(u - > u.date).max(Date :: compareTo).get();
Date maxDate = list.stream().map(u -> u.date).max(Date::compareTo).get();
小片にそれを分解するだろう理解するのが最も簡単。保持するクラスを想像してくださいDate object
:
static class Holder {
public Date date;
public Holder(Date d) {
super();
}
}
List<Holder> list= Arrays.asList(new Holder(new Date()));
// creates a Stream<Holder> having the list as the source
Stream<Holder> s1 = list.stream();
// creates a Stream<Date> by taking the previous elements from the Stream
// and mapping those to `Date date`
Stream<Date> s2 = s1.map(u -> u.date);
// consumes the stream by invoking max using the compareTo method
// two Date objects are Comparable by invoking compareTo
Optional<Date> optionalDate = s2.max(Date::compareTo);
// gets the maxValue from that Optional
// if the initial list is empty, your last get will throw a NoSuchElementException
Date maxDate = optionalDate.get();
もう1つ質問してください: /***ストリーム
'u'は単にこの場合の' Holder'の変数名です。あなたはあなたが望む何でもそれを名付けることができます。あなたはこれを次のように宣言することもできます: '(Holder holder) - > holder.date';型は通常コンパイラによって推論されます。 – Eugene
Date maxDate =
list.stream() // create a Stream<TheElementTypeOfTheList>
.map(u -> u.date) // map each element of a Date, thus creating a Stream<Date>
.max(Date::compareTo) // find the max Date of the Stream
.get(); // return that max Date (will throw an exception if the
// list is empty)
もう1つ質問してください。/ *** Stream
ようこそスタックオーバーフロー! [ツアー](https://stackoverflow.com/tour)、 を見て、[ヘルプセンター](https://stackoverflow.com/help)、特に を読んでください[どのようにして私は良い質問をしますか?](https://stackoverflow.com/help/how-to-ask) と[ここではどのような話題がありますか?](https://stackoverflow.com/help/on-トピック)。 –
式 '.max(Date :: compareTo)'は、 'Date'が' Comparable'を実装しているので、 'compareTo'メソッドを呼び出すカスタムコンパレータを不必要に作成するので、' .max(Comparator.naturalOrder()) 'は仕事。 – Holger