如何在默认情况下使用lambdaj组

时间:2014-03-20 18:48:59

标签: java lambdaj

我有这种情况,我根据标准将列表过滤到多个列表。

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 个答案:

答案 0 :(得分:1)

使用“组”功能无法实现此目的。您在问题中添加的组方法是正确的方法来接近您需要的但您将无法涵盖默认情况。

如果您想使用LambdaJ执行您想要的操作,您必须合并filter(或select)。您可以在此处获得过滤器

的代码
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);

希望能提供帮助。