如何实现在集合list中进行多条件筛选?

JAVA8以下版本, 如何实现在集合list中进行多条件筛选,请举例说明

 List<String> strs = new ArrayList<>();
        List<String> strss = new ArrayList<>();
        strs.add("你");
        strs.add("你好");
        strs.add("你hao");
        strs.add("你好啊");
        strs.add("你hao啊");
        strs.add("你haoa");
        for (String str : strs) {
            if ("你".equals(str) || "你好".equals(str)) {
                strss.add(str);
            }
        }
        System.out.println("strs = " + strs);
        System.out.println("strss = " + strss);

我没接触LS说的JAVA8的新特性lambda表达式来解决这个问题,所以只能个人见解:
1.既然多条件,那么必然同时满足所有条件,于是我这样做
2.先拿第一个条件,然后遍历集合(原始集合,方便就代号1),找到满足这个条件的对象,然后放入新的List(第二个集合,代号集合2吧)里面(简单的遍历+if,我想你应该能做吧)
3.拿代号2的集合,再重复第2部,只是把if里面的条件改为条件2,得到集合3。。。。
4.那么按照以上逻辑,最后我必然得到了一个满足所有条件的对象的集合(当然这里就可以判断最后获得的集合长度,是0的话就说明没有符合条件的!!!!)!

for (类型 i : list)
{
if (条件1 && 条件2)
listResult.add(i);
}
java8以上,用lambda就可以了。

换成8是最好的 java8带的labmda表达式非常适合处理这个问题

for (类型 i : list)
{
if (条件1 && 条件2){
System.out.println(i);
}
} 这个方法循环是可以的

就只能是循环然后用if条件,其他没有什么办法了啊

好像除上面的迭代list外,找不到更好的解决方法了。
我提供一个思路,如果你需要大批量控制每个元素插入的筛选条件,可以自定义继承一个现有的list实现,例如ArrayList,然后覆盖add方法,在里面添加筛选条件,但是这是添加前的处理,而不是例如楼上处理已有集合。

public class ScreenArrayList<String> extends ArrayList<String>{
    @Override
        public boolean add(String  str){
            return str.contains("不想添加") ? false : super.add(str);
        }
}

Java8中使用filter()过滤列表,使用collect将stream转化为list

list.stream().filter(c -> c.getBillId() != null ).map(GyOrder::getBillId).collect(Collectors.toList());

list.contains就可以判断了哈如果你要去重可以使用hashset

是不是要动态的多条件组合查询:
1写一个条件类:该类有条件名,运算符和条件值三个属性;
2把前台获取到的条件参数进行不为空判断后,按照条件类进行封装,然后装入到声明的list集合中
3对所有的条件判断完后,对list进行循环,如果操作运算符不为空,说明有条件,可用StringBuffer进行拼接,这样只要有条件就会拼接起来,注意声明StringBuffer的时候加上1=1
4最后把拼接的sql和固定部分的sql进行拼接,组合成完整的sql

使用filter()过滤列表,使用collect将stream转化为list

 List<String> lists = new ArrayList<String>();
 // ..... 填充数据
 // lists.add("fxx");
 for(String str:lists){
        if("x".equals(str)){
           //匹配的
        }
 }

java 8:

lists.stream().filter(x->x.equals("xxxx") || x.equals("xyz")).collect(toList());

filter里面可以添加多个条件.跟if类似.

您用if嵌套可以实现您的需求吗

写个接口,接口参数为被过滤的数据集合+ 过滤规则,返回被过滤的结果
可以参考这个博客https://blog.csdn.net/u010714901/article/details/79173034