CONTAINS
Java コレクションに型機能を実装する方法を教えてください。私の問題は、名前のリストがあることです。例:-List<String> nameList = new ArrayList<String>();
このリストには、たとえば 100 個の要素があります。Paras Anand
リストに名前があるとしましょう。ara ana
またはを検索するとana ara
、結果が得られるはずです。CONTAINS
私が欲しいSQLで使用される句のようなもの。
質問する
1269 次
2 に答える
2
ここに別の解決策があります:よりエレガントな方法と少し複雑な方法:):
andArrayList
をオーバーライドするためのカスタム実装:contains
containsAll
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 に答える