2017-07-03 10 views
-2

は、いくつかのいずれかがこれを説明してもらえ:いくつか説明してください。Date maxDate = list.stream()。map(u - > u.date).max(Date :: compareTo).get();

Date maxDate = list.stream().map(u -> u.date).max(Date::compareTo).get(); 
+2

ようこそスタックオーバーフロー! [ツアー](https://stackoverflow.com/tour)、 を見て、[ヘルプセンター](https://stackoverflow.com/help)、特に を読んでください[どのようにして私は良い質問をしますか?](https://stackoverflow.com/help/how-to-ask) と[ここではどのような話題がありますか?](https://stackoverflow.com/help/on-トピック)。 –

+1

式 '.max(Date :: compareTo)'は、 'Date'が' Comparable'を実装しているので、 'compareTo'メソッドを呼び出すカスタムコンパレータを不必要に作成するので、' .max(Comparator.naturalOrder()) 'は仕事。 – Holger

答えて

2

小片にそれを分解するだろう理解するのが最も簡単。保持するクラスを想像してください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(); 
+0

もう1つ質問してください: /***ストリーム s2 = s1.map(u - > u.date); ****/ ここには "u"は何ですか?それはclasの名前(ex:ホルダー)ですか? –

+1

'u'は単にこの場合の' Holder'の変数名です。あなたはあなたが望む何でもそれを名付けることができます。あなたはこれを次のように宣言することもできます: '(Holder holder) - > holder.date';型は通常コンパイラによって推論されます。 – Eugene

3
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) 
+0

もう1つ質問してください。/ *** Stream s2 = s1.map(u - > u.date); **** /ここでは "u"は何ですか?それはクラスター(ex:ホルダー)ですか? –

関連する問題