2

CONTAINSJava コレクションに型機能を実装する方法を教えてください。私の問題は、名前のリストがあることです。例:-List<String> nameList = new ArrayList<String>(); このリストには、たとえば 100 個の要素があります。Paras Anandリストに名前があるとしましょう。ara anaまたはを検索するとana ara、結果が得られるはずです。CONTAINS私が欲しいSQLで使用される句のようなもの。

4

2 に答える 2

2

ここに別の解決策があります:よりエレガントな方法と少し複雑な方法:):

andArrayListをオーバーライドするためのカスタム実装:containscontainsAll

import java.util.ArrayList;
import java.util.Collection;

public class CustomStringList extends ArrayList<String> {

    private static final long serialVersionUID = -3513906584235908802L;

    public CustomStringList(Collection<String> aist) {
        super(aist);
    }

    @Override
    public boolean contains(Object obj) {
        String paramString = (String) obj;

        for (String string : this) {
            if (string.toLowerCase().indexOf(paramString.toLowerCase()) != -1) {
                return true;
            }
        }

        return false;
    }

    @Override
    public boolean containsAll(Collection<?> collection) {
        for (Object obj : collection) {
            if (!contains(obj)) {
                return false;
            }
        }

        return true;
    }
}

Controllerテストのメイン:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class Controller {
    private static List<String> names = new ArrayList<String>();;

    static {        
        names.add("shyamali bose");
        names.add("SHYAMALI BOSE");
        names.add("aShoK BoSE");
    }

    private static List<String> contains(String search) {
        CustomStringList searchParts = new CustomStringList(Arrays.asList(search.split("\\s")));
        List<String> matcheResults = new ArrayList<String>();

        for(String name : names) {              
            CustomStringList nameParts = new CustomStringList(Arrays.asList(name.split("\\s")));

            if(nameParts.containsAll(searchParts)) {
                matcheResults.add(name);
            }
        }

        return matcheResults;
    }

    public static void main(String... args) {               
        String searchString = "ose ose";
        System.out.println("Matched for: " + searchString + " | " + (contains(searchString).size() > 0));       

        searchString = "ame osa";
        System.out.println("Matched for: " + searchString + " | " + (contains(searchString).size() > 0));

        searchString = "ama OSE";
        System.out.println("Matched for: " + searchString + " | " + (contains(searchString).size() > 0));

        searchString = "ose AMA";
        System.out.println("Matched for: " + searchString + " | " + (contains(searchString).size() > 0));
    }
}

出力:

Matched for: ose ose | true
Matched for: ame osa | false
Matched for: ama OSE | true
Matched for: ose AMA | true

ご不明な点がございましたらお気軽にお尋ねください。

于 2013-03-07T18:12:01.380 に答える