Vis*_*har 4 arrays android arraylist
我有大约29,000条记录的记录集.我的屏幕包含搜索条件的EditText框和包含所有29,000条记录的Listview.
通过列出的方式进行搜索需要时间,而不是根据需要提供更少的流量输出.
我的EditText包含
final EditText txtSearchCity = (EditText) findViewById(R.id.edtCity);
txtSearchCity.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
aCountryIDTemp.clear();
aCityStateTemp.clear();
for (int i = 0; i < aCountryID.size(); i++) {
if (aCityState
.get(i)
.toLowerCase()
.contains(
txtSearchCity.getText().toString()
.toLowerCase())) {
aCountryIDTemp.add(aCountryID.get(i));
aCityStateTemp.add(aCityState.get(i));
}
}
BindList();
}
});
}
Run Code Online (Sandbox Code Playgroud)
BindList()方法将arraylist aCityStateTemp设置为adapter.任何其他方式动态搜索和创建新的ArrayList.
Lal*_*ani 14
我坚持使用Lambdaj Library,它主要用于你想要限制循环以进行排序和过滤集合的情况.
这是使用lambdaj进行过滤的一个小例子ArrayList
.
ArrayList<String> sortedArrayList = select(arrList, having(on(String.class),
Matchers.containsString("a");
Run Code Online (Sandbox Code Playgroud)
这将返回一个完整的过滤ArrayList
,您希望填充您的ListView
.
您还可以使用filter
自定义类 - Java:过滤集合的最佳方法是什么?
更新:
以上解决方案是case-sensitive
如此解决您可以添加多个匹配器.
像这样你可以添加Multiple Matchers
,
ArrayList<String> sortedArrayList = select(arrList, having(on(String.class),
(Matchers.anyOf(Matchers.containsString("a"),Matchers.containsString("A")))));
Run Code Online (Sandbox Code Playgroud)
更新:
更好的方法是使用 filter(Matcher<?> matcher, T...array)
这是你如何做到的,
ArrayList<String> sortedArrayList = filter(Matchers.anyOf(
Matchers.containsString("a"),Matchers.containsString("A")), arrList);
Run Code Online (Sandbox Code Playgroud)
此外,如果您对使用某些方法/功能感兴趣lambdaj
,可以提取源并使其正常工作.我正在添加相同的filter()
您可以下载hamcrest-all-1.0.jar(63 kb)
并添加以下代码以使其filter()
正常工作
public static <T> List<T> filter(Matcher<?> matcher, Iterable<T> iterable) {
if (iterable == null)
return new LinkedList<T>();
else{
List<T> collected = new LinkedList<T>();
Iterator<T> iterator = iterable.iterator();
if (iterator == null)
return collected;
while (iterator.hasNext()) {
T item = iterator.next();
if (matcher.matches(item))
collected.add(item);
}
return collected;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以从lambdaj
源代码中找出最少的内容并在源代码中集成.
归档时间: |
|
查看次数: |
7282 次 |
最近记录: |