1

基準に基づいてリストを複数のリストにフィルタリングするこのケースがあります。

for(SomeObj someObj : someObjs) {
    if(StringUtils.equalsIgnoreCase(someObj.getIndicator(), "Y")) {
        beansWithY.add(someObj);
    } else if(StringUtils.equalsIgnoreCase(someObj.getIndicator(), "N")) {
        beansWithN.add(someObj);
    } else {
        beansWithIndNotValid.add(someObj);
    }
}

これは単純に見えますが、Lambdaj を使用してこれが可能かどうか疑問に思っています。

グループ化に出くわし、次のように使用できますが、デフォルトのシナリオをカバーしていないようです。

Group<SomeObj> group = group(listOfSomeObjs, by(on(SomeObj.class).getIndicator())); 

この後、結果は次のようになります。

Y group
N group
null group
a group for each and every invalid indicator ( like A, B, C...)

これが上記のforループのように機能するようにできるかどうか疑問に思っています.Yの場合-リスト/グループに移動し、N-別のリスト/グループに移動し、それ以外はすべて1つのグループに移動します。

4

1 に答える 1

1

「グループ」機能を使用してこれを達成することはできません。質問に追加したグループ メソッドは、必要なものにアプローチする正しい方法ですが、デフォルトのケースをカバーすることはできません。

LambdaJ を使用して目的を実行する場合は、結合filter(またはselect) する必要があります。ここにfilterのコードがあります:

List<SomeObj> yList = filter(having(on(SomeObj.class).getIndicator(), equalTo("Y")), listOfSomeObjs);
List<SomeObj> nList = filter(having(on(SomeObj.class).getIndicator(), equalTo("N")), listOfSomeObjs);
List<SomeObj> dList = filter(having(on(SomeObj.class).getIndicator(), not(equalTo("Y"))).and(having(on(SomeObj.class).getIndicator(), not(equalTo("N")))), listOfSomeObjs);

Map<String, List<SomeObj>> map = new HashMap<>();
map.put("Y", yList);
map.put("N", nList);
map.put("D", dList);

お役に立てれば幸いです。

于 2014-06-09T20:12:30.007 に答える