链接列表不包含大于特定数字的值

时间:2017-02-16 14:06:52

标签: java list linked-list

如何创建一个方法来检查链表是否包含大于参数的任何数字?

我们说我们有链表

[ 8 7 1 3 ]。这将返回true

[ 10 12 3 2]会返回false

这会有用吗?

public boolean f(int k) {
    for (int=0; int<linkedList.size(); i++) {
        if (linkedList.get(i)>k)
            return false;
        }
        else
            return true;
    }

另外,我需要提一下,此方法不会以任何方式更改列表,如果列表包含null元素,它仍然可以工作。

谢谢!

3 个答案:

答案 0 :(得分:4)

使用Java 8

public boolean f(int k) {
   return !linkedList.stream().anyMatch(i-> i> k );
}

澄清:我假设您希望在方法中返回false,即使单个元素高于给定的k。因此我使用anyMatch,因为我们只需要寻找一个更高的元素。没有必要遍历整个列表。

答案 1 :(得分:1)

这不会影响您目前的使用方式。您需要在返回之前循环遍历整个列表。你应该提前返回的唯一时间是你在这种背景下找到return false的理由。所以将你的return true移到你的循环之外然后你就没事了。

另外,尝试为您的方法和类定义赋予意义。说obj.f(12)并没有多说,而obj.noElementGreaterThan(12)说的更多。

例如:

public boolean noElementGreaterThan( int k ) {
   for( int i = 0; i < linkedList.size(); i++ )
   {
      if( linkedList.get(i) > k )
         return false;
   }
   return true;
}

这个工作的原因是因为它将遍历整个对象列表,将每个对象与传入的值(k)进行比较。如果该值大于k,那么它将return false,这意味着它的元素大于k

答案 2 :(得分:0)

使用你可以这样做的流:

public boolean f(int k) {
    List<Integer> filtered = linkedList.stream().filter(i -> i >  k).collect(Collectors.toList());
    return !filtered.isEmpty();
}