2016-10-22 7 views
-1

は、私がタイプENTITYの項目が含まれている以下のListを、持っていると仮定します。 ENTITYには、自然順序付けを決定する整数フィールドがあります。そのフィールドの値に基づいて最大値または最小値のENTITYを取得します。これをJavaでどのように実装できますか? Javaの8のストリームAPIの多くのアプリケーションのそのメンバーのそれぞれのフィールドに基づいてリストをソート

List<ENTITY> lt = new ArrayList<ENTITY>(); 

class ENTITY 
{ 
    int field; 
    /* Constructor, getters, setters... */ 
} 
+0

:昇順にソートするには(リストの先頭に最小の要素を、最後に最大の)あなたはこのようなものを使用することができます。 – silentprogrammer

+0

私はそれを実装する方法の一つであるカスタム比較者を書くことを知っています、他のより良い方法ですか? – Jason

+0

@silentprogrammerまた、ぼんやりとした正しいJavaの試みでもありません。 – chrylis

答えて

1
//stream the elements, map to their fields, and get the max 
return lt.stream().max((e1, e2) -> Integer.compare(e1.filed, e2.filed)).orElse(/* default */); 

ちょうど1。

私が最初にいくつかのコーディング規則に取り組んお勧めしますけど。

+0

知っていると私たちは私たちの環境それは、あなたが単に同じ概念反復しています – Jason

+0

でJavaを使用することはできませんあなたのリストの要素を検索し、探している値を持つものを見つけます(例えば、最大 'filed'値)。これらはあなたがループの上に行っていない場合、私はここに始まることをお勧めしたい、基本的なJavaの概念である:https://docs.oracle.com/javase/tutorial/java/index.html – Rogue

+0

私は、Javaと同じようにしたい8ストリームのAPIは、Java 7で働いています – Jason

2

はあなたのリストをソートするComparatorCollections.sortを使用してください。昇順に並べ替えるか降順に並べ替えるかによって、max要素とmin要素の位置が異なります。いずれの場合も、反対側にあり、リストの一番上に1つ、下部に1つあります。私はOPからの研究努力が存在しないため、この質問を閉じるために投票しています

Collections.sort(lt, new Comparator<ENTITY> { 
    public int compare(ENTITY o1, ENTITY o2) { 
     if (o1 == null) { 
      if (o2 == null) { 
       return 0; 
      } 
      return -1; 
     } 
     else if (o2 == null) { 
      return 1; 
     } 

     // If field is Comparable: 
     return o1.getField().compareTo(o2.getField()); 

     // OR - If field is an int 
     return o1.getField() < o2.getField() ? -1 : (o1.getField() > o2.getField() ? 1 : 0); 
    } 
}); 
+0

それはまだ私はカスタムのcomparerを書く必要があるようだ、それはJava 8のストリームAPIのようにそれを実装する簡単な方法はないと思われる – Jason

+0

@ジェイソンあなたが "簡単な方法"...上記の数行のコードは特に難しいことではありません。ストリームAPIはJava 7では使用できませんでしたが、人々はリストをソートしてJava 8を概念化するずっと前から最大値と最小値を見つけていました。 – nbrooks

関連する問題