使用Linq搜索过滤器

时间:2017-11-27 06:36:59

标签: java android linq

我想在android中的列表中使用EditText来应用搜索过滤器。

现在我正在使用for循环(代码下面)。

private List<AllAttendance> filter(List<AllAttendance> mAttendanceList, CharSequence charSequence) {

    final String text = String.valueOf(charSequence).toLowerCase();


    List<AllAttendance> filteredList = new ArrayList<>();
    for (AllAttendance attendance : mAttendanceList){

        if (attendance.getMandalName().toLowerCase().contains(text) || attendance.getSabhaName().toLowerCase().contains(text) || attendance.getSabhaDate().toLowerCase().contains(text))
            filteredList.add(attendance);
    }
    return filteredList;
}

上面的代码工作正常。但是我用linq替换n我没有得到任何记录,我在列表中有预先记录。

    private List<AllAttendance> filter(List<AllAttendance> mAttendanceList, CharSequence charSequence) {

    final String text = String.valueOf(charSequence).toLowerCase();
    List<AllAttendance> filteredList =
            Linq.stream(mAttendanceList)
                    .where(c -> c.getSabhaName().contains(text))
                    .toList();
    return filteredList;
}

1 个答案:

答案 0 :(得分:0)

首先Stream API甚至没有where方法。您应该在Stream上使用filter来实现过滤功能。

替换它:

List<AllAttendance> filteredList =
        Linq.stream(mAttendanceList)
            .where(c -> c.getSabhaName().contains(text))
            .toList();

使用:

List<AllAttendance> filteredList =
        mAttendanceList.stream()
            .filter(c -> c.getSabhaName().contains(text))
            .collect(Collectors.toList());