2017-09-29 18 views
1

我正在使用 if(Collections.frequency(pattern, l) > 15) 檢查列表中是否有重複出現15次的長整數。我還需要做的是一樣的東西 if(Collections.frequency(pattern, >500) > 15) 所以它會檢查數量超過500多少次在列表中也會發生,反正是有這樣做嗎?Java如果列表中的數字超過了x

+0

我不認爲你讀了我的問題。 –

+0

你可以編寫自己的函數嗎?或者你是否必須使用Java集合? –

+0

'如果(pattern.stream()過濾器(X - > X> 500).Count之間的()> 15)' –

回答

1

你可以這樣做:

if(pattern.stream().filter(p-> p > 500).collect(Collectors.toList()).size() > 15) 
+2

爲什麼你寫的'.collect(Collectors.toList()),大小()'而不是'。 .Count中()'?這浪費了記憶和週期。 –

+0

@LouisWasserman是對的。我們可以使用.count() –

+0

@LouisWasserman你是對的 – tammy

-1

相信frequency()函數查找精確匹配的對象,所以你不能。你不能循環收集舊的方式,並比較每個元素,並添加一個計數器?

for (iterable_type iterable_element : collection) { 
    if (iterable_element > 500) counter++; 
} 
0

注意:這不是原始答案。我只是把@tammy和@ LouisWasserman的 答案可以很容易地瞭解誰尚未使用的Java 1.8之前。

import java.util.LinkedList; 
import java.util.List; 
import java.util.stream.Collectors; 

public class FrequencyTest { 

    public static void main(String[] args){ 
     List<Integer> intList = new LinkedList<Integer>(){{ 
      add(1); 
      add(501); 
      add(599); 
      add(499); 
      add(11); 
      add(11); 
      add(12);  
     }}; 

     int count = intList.stream().filter(p-> p > 500).count(); 
     System.out.println(count); 
    } 
} 
0

既然你沒有特別要求一個Java 8的回答,這應該在大多數Java版本,但很容易修改使用lambda表達式。

我覺得你真的希望有「換出」,或有功能的多個版本,可以在不重寫代碼中使用的能力是什麼。這是從計數分離的標準。在這種情況下,您需要傳遞一個接口的實例,該接口實現一個方法來確定是否滿足條件。在下面的情況下,我把它叫做IMyComparator被傳遞到我自己的靜態frequency方法。

這樣,在我自己的「收藏」類,我可以有一個frequency經營像Collections.frequency

public class MyCollection { 

    private interface IMyComparator { 
     public int isCriteriaMet(Integer source, Integer target); 
    } 

    private class MyComparator implements IMyComparator 
    { 
     public int isCriteriaMet(Integer source, Integer target) 
     { 
      if ((source == null) || (target == null)) { 
       return 0; 
      } 

      if (source.intValue() > target.intValue()) { 
       return 1; 
      } else { 
       return 0; 
      } 

     } 
    } 

    private Collection<Integer> numbers; 
    private IMyComparator imc; 


    public static void main(String[] args) { 
     MyCollection test = new MyCollection(); 
     int result = MyCollection.frequency(test.numbers, 500, test.imc); 
     System.out.println("Frequency of numbers > 500: " + result); 

    } 



    public MyCollection() { 
     numbers = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 100, 200, 300, 1000, 2000, 3000)); 
     imc = new MyComparator(); 

    } 

    public static int frequency(Collection<Integer> c, Object target, IMyComparator imc) { 

     int count = 0; 

     for (Integer element: c) { 
      count += imc.isCriteriaMet(element, 500); 
     } 

     return count; 

    } 

} 
相關問題