Java 8ストリームを使用してコードを記述しましたが、リファクタリングしようとしています。
さまざまな基準でリストをフィルタリングし、新しいリストに保存しました。すべての基準を一度にフィルタリングし、結果のグループをリストに保存する方法はありますか?それを説明する方法がわかりません。
これが私のコードで、リファクタリングする必要があります。
List<A> finalList = new ArrayList<>();
List<A> aList= new ArrayList<>();
A objectA = new A();
List<B> bList = new ArrayList<>();
bList.add(new B(5700));
bList.add(new B(5750));
bList.add(new B(5800));
bList.add(new B(5812));
bList.add(new B(5803));
bList.add(new B(5802));
objectA.setMyList(bList);
aList.add(objectA);
aList.stream()
.forEach(
a -> {
if(!a.getMyList.isEmpty()){
List<B> groupA =
a.getMyList.stream()
.filter(b -> b.getType() == 5700 || b.getType() == 5750)
.collect(Collectors.toList());
List<B> groupB =
a.getMyList.stream()
.filter(b -> b.getType() == 5800 || b.getType() == 5810)
.collect(Collectors.toList());
List<B> groupC =
a.getMyList.stream()
.filter(b -> b.getType() == 5802 || b.getType() == 5812)
.collect(Collectors.toList());
List<B> groupD =
a.getMyList.stream()
.filter(b -> b.getType() == 5803 || b.getType() == 5813)
.collect(Collectors.toList());
if(!groupA.isEmpty()){
finalList.add(getAWithGroupList(a, groupA));
}
if(!groupB.isEmpty()){
finalList.add(getAWithGroupList(a, groupB));
}
if(!groupC.isEmpty()){
finalList.add(getAWithGroupList(a, groupC));
}
if(!groupD.isEmpty()){
finalList.add(getAWithGroupList(a, groupD));
}
}
}
);
private A getAWithGroupList(A a, List<B> group) {
A a = (A) a.clone();
a.setMyList(group);
return a;
}
どんな助けや提案もいただければ幸いです。
ありがとう。
シンプル。繰り返しコードをメソッドでラップします。
private List<B> listifyAndfilter(A a, Predicate<List<B>> check){
return a.getMyList.stream().filter(check).collect(Collectors.toList());
}
そして、あなたはすることができます:
List<B> groupA = listifyAndFilter(a, b -> b.getType() == 5700 || b.getType() == 5750),
groupB = listifyAndFilter(a, b -> b.getType() == 5800 || b.getType() == 5810),
groupC = listifyAndFilter(a, b -> b.getType() == 5802 || b.getType() == 5812),
groupD = listifyAndFilter(a, b -> b.getType() == 5803 || b.getType() == 5813);
行末のコンマに注意してください。
無関係ですが便利です:次のifステートメントを組み合わせることもできます:
if(!groupA.isEmpty()){
finalList.add(getAWithGroupList(a, groupA));
}
if(!groupB.isEmpty()){
finalList.add(getAWithGroupList(a, groupB));
}
if(!groupC.isEmpty()){
finalList.add(getAWithGroupList(a, groupC));
}
if(!groupD.isEmpty()){
finalList.add(getAWithGroupList(a, groupD));
}
このfor-eachループに:
for (List<B> group : new List<B>[]{groupA, groupB, groupC, groupD}) // Packs the lists in an array and iterates over the array
if(!group.isEmpty())
finalList.add(getAWithGroupList(a, group));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加