检查List <list <objects>&gt;中是否存在值在java?

时间:2017-08-02 08:22:15

标签: java list collections

我想检查List<List<objects>>中是否存在对象,如果找到该对象,则返回List<<>>的索引。

例如:

List<List<Integer>> listOfLists = new ArrayList<>(); 
List<Integer> listOne = new ArrayList<>();
listOne.add(1);
listOne.add(9);
listOfLists.add(listOne);
List<Integer> listTwo = new ArrayList<>();
listTwo.add(5);
listTwo.add(7);
listOfLists.add(listTwo);

现在我想查找是否存在9,如果是,则返回列表列表中的索引,即&#39; 0&#39; 是否应对其进行任何修改以使用自定义对象?

3 个答案:

答案 0 :(得分:2)

您可以使用流来检查列表中是否存在对象

boolean has = listOfLists.stream().anyMatch(e -> e.contains(Integer.valueOf(9)));

如果您找到任何匹配项,则可以获得索引

List<Integer> list = listOfLists.stream().filter(e -> e.contains(Integer.valueOf(9))).findAny().get();
int index = listOfLists.indexOf(list);

在此示例中,列表是通用的<Integer>,我正在寻找某个整数,即Integer.valueOf(9),但您可以根据自己的目的进行调整...

答案 1 :(得分:1)

如果你可以使用番石榴:

return Iterables.indexOf(listOfLists, innerList -> innerList.contains(9));

这将返回找到的第一个对象的索引,如果未找到则返回-1。

如果您的列表包含自定义对象而不是Integer,则代码完全相同;它依赖于具有正确定义的equals()方法的自定义对象。

答案 2 :(得分:0)

遍历列表,如果包含,则返回索引

for(List<Integer> list : listoflists){
    if(list.contains(9)){
        return listoflists.indexOf(list);
    }
}