2016-10-16 7 views
1

私は説明するのが難しい質問があります。いくつかの言葉で私はSet<object>を持っているので、要素を1つずつ取得する必要があります(つまり、要素のセットを取得する必要があります)が、サイクル外では不可能です。例えば、ここで私はすべて取得することができます。セット内の単一要素を取得

for (Iterator<Object> i = fh.getParsed().iterator(); i.hasNext();) { 
     HTTPFormat next = (HTTPFormat) i.next(); 
     System.out.println(next.getIP()); 
    } 

をしかし、私はちょうど要素を印刷したい場合(すなわちのSystem.out.println(trial.getParsed()(0))はIを理解するために得ます。クラスとして属性として「パースされた」というセットがあり、パースされたゲッターがありますが、私も明確であるかどうかはわかりませんが、私はそう思っています。 :) ありがとうございました!

+0

ですから、あなたがお勧めのコードをしない理由を最初に印刷し、またはループを使用しないようにしたい場合は? –

+0

一般的に言えば、セットは注文されていないので、セットに複数のエレメントが含まれている場合は、「最初のもの」を求める場合にどの要素が得られるか保証されません。特に、反復処理の最初の要素を反復して取得する場合、その要素が最初にセットに追加されたという保証はありません –

答えて

4

あなたがSetの単一の要素が必要な場合は、これは、繰り返し順序に従ってSetの最初の要素を返します

HTTPFormat element = (HTTPFormat) fh.getParsed().iterator().next(); 

を書くことができます。これが順序集合(TreeSetなど)の場合、その順序に従って最初の要素が返されます。 HashSetの場合は、任意の要素(hashCode()の実装HTTPFormatと現在のサイズSetに依存します)を返します。

Setが空の場合は例外がスローされることに注意してください。

P.S.私はSet<Object>を使用しません。 SetHTTPFormatの要素が含まれている場合は、安全でないキャストを避けるためにSet<HTTPFormat>を使用してください。

+1

または、キャストの必要を避けて印刷します。 +1 –

+1

@PeterLawreyしかし、OPが要素全体を印刷したい場合(OPの 'getIP()'のように問題のコードスニペットのように)印刷する必要がある場合にのみ有効です。 – Eran

+0

あなたが今追加したのと同じ情報を追加しようと考えていました。+1 –

0

あなたがJava8 +を使用している場合は、コレクションから一つの要素を取得するためにfindAnyまたはfindOneを使用することができ、

以下
HTTPFormat element = (HTTPFormat) fh.getParsed().stream().findAny().orElse(defaultObject()); 

find*のようなリターンを使用しても安全であるとあなたが得る/デフォルトの要素を渡すことができます任意のオブジェクトは、コレクションが空の場合あなたが最初の要素が必要な場合

あなたが注文したコレクションの場合にfindFirstを使用することができます

関連する問題