baidu_40542659
baidu_40542659
采纳率0%
2017-12-14 03:26 阅读 11.9k

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

20

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

15条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-12-14 03:28

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

    点赞 2 评论 复制链接分享
  • sinat_34344123 星尘的一个朋友 2017-12-14 03:56
     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);
    
    点赞 1 评论 复制链接分享
  • xiaoyan_master xiaoyan_master 2017-12-14 03:58

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

    点赞 1 评论 复制链接分享
  • qq_29743633 qq_29743633 2017-12-14 06:04

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

    点赞 1 评论 复制链接分享
  • MikeDDT009 MikeDDT009 2017-12-14 06:12

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

    点赞 1 评论 复制链接分享
  • qq_29525177 qq_29525177 2017-12-14 06:19

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

    点赞 评论 复制链接分享
  • zhaoyf7746 zhaoyf7746 2017-12-14 06:20

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

    public class ScreenArrayList<String> extends ArrayList<String>{
        @Override
            public boolean add(String  str){
                return str.contains("不想添加") ? false : super.add(str);
            }
    }
    
    
    点赞 评论 复制链接分享
  • feiduxin 计算机信徒 2017-12-14 07:01

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

    点赞 评论 复制链接分享
  • jinshi366 jinshi366 2017-12-14 07:37

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

    点赞 评论 复制链接分享
  • liushimiao0104 小卒过河0104 2017-12-14 08:54

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

    点赞 评论 复制链接分享
  • kong000dao1018 kong000dao1018 2017-12-14 10:00

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

    点赞 评论 复制链接分享
  • hailan840221 hailan840221 2017-12-15 02:04

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

    点赞 评论 复制链接分享
  • dcxy0 Q544471255 2017-12-16 01:53
     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类似.

    点赞 评论 复制链接分享
  • Oliver_wq 奥利弗呀 2017-12-21 14:02

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

    点赞 评论 复制链接分享
  • mochengjiuren_shang 来自之江不愿透露名字的渣某人 2019-04-12 12:34

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

    点赞 评论 复制链接分享

相关推荐