Aimad Majdou Aimad Majdou - 1 year ago 54
Java Question

filtering an ArrayList using an object's field

I have an ArrayList which is filled by Objects.

My object class called

which has two fields ;

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;}


I want to filter my List using the
field, and for test I used the String "test".

I used the Guava from google which allows me to filter an ArrayList.

this is the code I tried :

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")));

but this code isn't working.

fge fge
Answer Source

This is normal: Predicates.containsPattern() operates on CharSequences, which your gestionStock.Article object does not implement.

You need to write your own predicate:

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

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

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

Then use:

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

However, this is quite some code for something which can be done in much less code using non functional programming, as demonstrated by @mgnyp...