0

これは、以下の getUser メソッドを理解する方法です。

User オブジェクトまたは null を返します

ユーザーのセットを取得し、それらを userSer に割り当てます。セットが空でない場合は、セットの反復を開始しますが、セット内の最初のユーザーを返します。

メソッドは次のとおりです。

private User getUser(UserDet arg)
{
    Set<User> userSet = arg.getUsers(User.class);

    if (CollectionUtils.isNotEmpty(userSet))
    {
        for (User user : userSet)
        {
            return user;
        }
    }

    return null;
}

メソッドをこれに置き換えることができると思います:

private User getUser(UserDet arg)
{
    Set<User> userSet = arg.getUsers(User.class);

    if (CollectionUtils.isNotEmpty(userSet))
    {
        return userSet.iterator().next();
    }
    else {
        return null;
    }
}

この新しいメソッドはループを削除し、元の実装と同じようにセット内の最初の要素を返します。それが正しいか?

4

8 に答える 8

1

はい。実際、foreach ループはIterable.

ただし、空のセットの場合はループが繰り返されないため、最初のバリアントでは空でないチェックは必要ないことに注意してください。

于 2013-10-03T09:52:57.933 に答える
0

はい、どちらも同じです。最初の実装では、制御は関数からのループの最初の繰り返しで戻り、その結果、ループは終了します。

于 2013-10-03T09:56:03.810 に答える
0

はい、正しいです。を削除してCollectionUtils.isNotEmptySet、イテレータのhasNextメソッドを使用することもできます...セットがnullでないことが保証されている場合。

于 2013-10-03T09:52:23.880 に答える
0

はい。どちらのメソッドも、セット内の最初の要素を返します。最初のメソッドは、以前に何か他のもののために書かれ、変更されて for ループをそのまま維持しているようです。

いずれにせよ、あなたが提案している2番目の方法は、パフォーマンスに大きなメリットはありませんが、最初の方法よりも優れているはずです。

于 2013-10-03T09:56:19.680 に答える
0

したがって、UserDet#getUsers(Class)決して返さない場合 (ただし、ユーザーが見つからない場合はnull空)、最短の (そして私の意見では最も読みやすい) 形式は次のとおりです。Set

private User getUser(UserDet arg) {
    Set<User> userSet = arg.getUsers(User.class);

    return userSet.isEmpty() ? null : userSet.iterator().next();
}
于 2013-10-03T09:56:58.963 に答える
0

正しいように見えますが、メソッドが少し読みやすくなるだけで、パフォーマンスの面で最適化されません。それでも私はその変化は良いことだと思いますし、あなたはそれをすべきです。

于 2013-10-03T09:52:33.040 に答える