リソースをフィルタリングし、フィールドに基づいて一部の要素を除外しようとしています。除外するには、セット(除外する必要があるIDを含む)とリスト(除外する必要があるIDの複数の範囲を含む)があります。以下のロジックを作成しましたが、2番目のフィルターロジックに満足できません。Java 8でそれを実行できるより良い方法はありますか?範囲を含める場合も同じようにする必要があります。
Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900"));
List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000"));
return directoryRecords.stream()
.filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber()))
.filter((directoryRecord -> {
Boolean include = true;
for(String s : rangesToExclude) {
String [] rangeArray = s.split("-");
Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber());
if(extension <= Integer.parseInt(rangeArray[0]) && extension >= Integer.parseInt(rangeArray[1])) {
include = false;
}
}
return include;
}))
.collect(Collectors.toList());
ありがとう:)
Boolean
だけが必要な場合はオブジェクトを使用しないでくださいboolean
。ここでは、変数include
は完全に廃止されています。唯一の可能な変更がからtrue
への場合false
、あなたは置き換えることができinclude = false;
てreturn false;
最終結果が既に決定されているよう。次に、return include;
末尾のを置き換えてreturn true;
、変数宣言を削除できます。またdirectoryRecord
、ループ内では決して変更されないため、ループのInteger extension = Integer.parseInt(directoryRecord.getExtensionNumber());
前に移動できます(そしてに変更Integer
しますint
)。