2016-05-26 16 views
3

して、このラムダを交換し、私はソナーに次の警告取得しています:SONAR:メソッド参照

メソッド参照

コードでこのラムダを置き換えです:

私は乗り越えることができますどのように
protected List<Test> getTests(List<String> testIds) { 
    List<Test> tests = new ArrayList<>(); 
    if (!CollectionUtils.isEmpty(testIds)) { 
     testIds.stream().forEach(eachTestId -> tests.add(getTest(eachTestId))); 
    } 
    return tests; 
} 

この警告?

+2

が、全体ストリームの使用量は、その目的に反していますAPI。 'forEach'を使ってアクションを実行したいだけなら、コレクションに対して' forEach'を呼び出すことができます。どちらの場合でも、空のコレクションを確認する必要はありません。 'null'テストに' CollectionUtils.isEmpty'だけを使用している場合は、代わりにクリーン 'null'チェックを実行する必要があります。しかし、実際には、 'forEach'を使用する代わりに' return testIds.stream()。map(id - > getTest(id)).collect(Collectors.toList()); *その後、実際には 'getTest'のメソッドリファレンスを使用することができます – Holger

+1

SonarQubeのJavaアナライザーの開発者として:警告は間違っていますが、使用しているJavaアナライザのバージョンは正確ですか?これは最新のリリースで修正される可能性が最も高いためですか? – benzonico

答えて

1

あなたのgetTeststaticとしてマークし、次のように使用して参照して、あなたのメソッドを書くことができます:私はこれは明らかに間違った警告について何も言うことができない

protected List<Test> getTests(List<String> testIds) { 

    if (CollectionUtils.isEmpty(testIds)) { 
      return new ArrayList<Test>(); 
    } 

    return testIds.stream() 
      .map(Test::getTest) 
      .collect(Collectors.toCollection(ArrayList<Test>::new)); 
} 
+2

'ArrayList :: new'のような明示的な型は必要ないことに注意してください。単に' ArrayList :: new'を使うだけです。それに加えて、 'CollectionUtils.isEmpty(testIds)'は廃止されています。ストリームAPIは空のリストを扱うため、 'CollectionUtils.isEmpty'テストは単なる難読化された' null'テストです。したがって* if *が意図されている場合、 'if(testIds == null)は新しいArrayListを返す<>();'これをクリアします。代わりに、 'return(testIds == null?Stream。 empty():testIds.stream()).map(...).collect(...);'を使うと、返された 'List'必要に応じて入力します。 'Collectors.toList()'を使って... – Holger

関連する問題