根据给定的对象字段筛选列表(可以为null)

时间:2017-04-07 15:56:45

标签: java filtering

当我有一个FilterObject时,是否有任何复杂的方法来过滤对象列表..

public class FilterListOfBets {
    private final String userId;
    private final long betId;
    private final int minBetTime;
    private final int maxBetTime;
    // constructor and get methods ..
}

..以及包含所有字段的投注列表,所以..

public class Bet {
    private final long betId;
    private final String userId;
    private final long betTime;
}

..问题是FilterListObject的一些(如果不是全部)字段可以设置为null。结果取决于已设置的字段。 最后,我想要一个List filteredList,其中包含符合条件的所有对象。

例如,如果我知道设置了哪些值,我只需遍历列表:

for (Bet bet : listOfBets) {
    if (betFilter.getUserId == bet.getUserId && betFilter.getBetId == bet.getBetId && ...)     
}

如果将设置FilterListOfBets中的minBetTime和maxBetTime,则结果列表还应满足:minTime<时间< MAXTIME。

1 个答案:

答案 0 :(得分:0)

您可以创建一个要与之比较的对象,然后使用guava fluentiterable或java stream等

FluentIterable.from(listOfObject)
    .filter(new Predicate<FilterObject>(FilterObject item) {
        return item.equals(myTestItem);
    })
    .toList();

我已经在手机上写了这个,所以请仔细检查,但希望你能得到这个想法