当前位置: 首页 > 面试题库 >

使用对象的字段过滤ArrayList

高博涉
2023-03-14
问题内容

我有一个由对象填充的ArrayList。

我的对象类称为Article有两个字段;

public class Article {

    private int codeArt;
    private String desArt;

  public Article(int aInt, String string) {
        this.desArt = string;
        this.codeArt = aInt;
    }

    public int getCodeArt() {return codeArt; }
    public void setCodeArt(int codeArt) {this.codeArt = codeArt;}
    public String getDesArt() {return desArt;}
    public void setDesArt(String desArt) { this.desArt = desArt;}

}

我想使用该desArt字段过滤列表,为了进行测试,我使用了字符串“ test”。

我用了来自谷歌的番石榴,它可以过滤ArrayList。

这是我尝试的代码:

private List<gestionstock.Article> listArticles = new ArrayList<>();

//Here the I've filled my ArrayList

private List<gestionstock.Article> filteredList filteredList = Lists.newArrayList(Collections2.filter(listArticles, Predicates.containsPattern("test")));

但是此代码不起作用。


问题答案:

这是正常的:Predicates.containsPattern()在CharSequences上操作,您的gestionStock.Article对象未实现。

您需要编写自己的谓词:

public final class ArticleFilter
    implements Predicate<gestionstock.Article>
{
    private final Pattern pattern;

    public ArticleFilter(final String regex)
    {
        pattern = Pattern.compile(regex);
    }

    @Override
    public boolean apply(final gestionstock.Article input)
    {
        return pattern.matcher(input.getDesArt()).find();
    }
}

然后使用:

 private List<gestionstock.Article> filteredList
     = Lists.newArrayList(Collections2.filter(listArticles,     
         new ArticleFilter("test")));

但是,这是相当多的代码,可以使用非功能性编程以更少的代码完成某些事情,如@mgnyp所示…



 类似资料:
  • 我们的表有一个嵌套的映射角色,如下所示: 现在我要查找组123中在Department1中有角色的所有文档。如何基于嵌套映射的值字段进行筛选?类似于: 我知道如何通过嵌套对象键进行筛选,但无法找到通过“对象值”进行筛选。

  • 让我们假设有一个福克斯类,它有名字、颜色和年龄。假设我有一份狐狸的名单,我想打印出那些狐狸的名字,它们的颜色是绿色的。我想使用流来这样做。 字段: 名称:私有字符串 颜色:专用字符串 年龄:私有整数 我写了以下代码来做过滤和Sysout: 但是,我的代码中存在一些语法问题。 到底是什么问题?我该怎么整理?

  • 例如insert时需要忽略某个特定属性, update时只更新某些属性, 查询时需要跳过大字段等。 FieldFilter/FieldMatcher提供细致的过滤选项,包括: 黑名单(locked) 白名单(actived) 忽略空值(ignoreNull) 忽略数值0(ignoreZero) 忽略日期属性(ignoreDate) 忽略空字符串(ignoreBlankStr) 忽略数值型主键(ig

  • 问题内容: 我正在尝试通过使用搜索文本框来过滤ng-repeat中的嵌套对象。 给定以下对象: 我想做这样的事情: 这确实是行不通的。我尝试了很多事情,但无法使其正常运行。 我不想更改我的对象。 我进行了很多搜索,但没有找到符合我需要的内容。 问题答案: 我终于有了自己的问题的答案。 我只需要创建自己的过滤器,并使用正则表达式检查对象内部的属性是否具有所需的值即可: 并以这种方式在HTML中应用它

  • 可以对搜索结果进行过滤,只显示包含特定字段值的文档。也可以创建否定过滤器,排除包含特定字段值的文档。 从 Fields 表或 Documents 表中选择要添加的字段过滤器。除了可以创建积极字段和消极过滤器外,Documents 表还可以过滤某一字段是否存在。使用过的过滤器会在 Query 栏下方显示。消极过滤器用红色显示。 从 Fields 列表中添加一个过滤器: 点击想要过滤的字段名。这里显示

  • Apache Commons Collections库的CollectionUtils类为常见操作提供了各种实用方法,涵盖了广泛的用例。 它有助于避免编写样板代码。 这个库在jdk 8之前非常有用,因为Java 8的Stream API现在提供了类似的功能。 使用filter()方法过滤列表 CollectionUtils的filter()方法可用于过滤列表以删除不满足传递的谓词提供的条件的对象。