2016-09-22 55 views
0

是否有可能沒有外部foreach來迭代b。需要使用Java 8使用Java 8比較2個整型數組功能

Integer a[]={1,2,3,4}; 
Integer b[]={9,8,2,3}; 
for(Integer b1:b) { 
    Stream.of(a).filter(a1 -> (a1.compareTo(b1) ==0)).forEach(System.out::println); 
    } 
Output: 2 3 
+0

參見http://stackoverflow.com/questions/17863319/java-find-intersection-of-two-arrays – Tunaki

+1

'a1 - >(a1.compareTo(b1)== 0)'是一個相當混亂的方式說'a1 - > a1.equals(b1)'。您也可以使用'Predicate.isEqual(b1)',或者,如果您可以確定數組中不存在'null',則可以使用'b1 :: equals'。 – Holger

+1

@Tunaki:這些引用非常差。在這兩種情況下,接受的答案都不符合問題。 – Holger

回答

1

在2個一陽指確定共同的價值觀我會用套,如果你只希望共同的價值觀(即不考慮重複考慮)

Integer a[]={1,2,3,4}; 
Integer b[]={9,8,2,3}; 

Set<Integer> aSet = new HashSet<>(Arrays.asList(a)); 
Set<Integer> bSet = new HashSet<>(Arrays.asList(b)); 

aSet.retainAll(bSet); 
0

也許是這樣的建議:

public static void main(String[] args) { 
    Integer a[] = {1, 2, 3, 4}; 
    Integer b[] = {9, 8, 2, 3}; 

    Stream<Integer> as = Arrays.stream(a).distinct(); 
    Stream<Integer> bs = Arrays.stream(b).distinct(); 

    List<Integer> collect = Stream.concat(as, bs) 
      .collect(Collectors.groupingBy(Function.identity())) 
      .entrySet() 
      .stream() 
      .filter(e -> e.getValue().size() > 1) 
      .map(e -> e.getKey()) 
      .collect(Collectors.toList()); 

    System.out.println(collect); 
} 
  • 我們合併兩個陣列成一個流
  • groupBy是價值
  • 計數然後我們過濾列表比1更長的時間,列出包含重複
  • map到關鍵提取重複錄入
  • 打印它的價值。

編輯:添加不同於初始流。

+1

如果你做a = {1,1}和b = {2,3},它會說1和a都是a和b,這是錯誤的 –

+0

增加了distinct來修復這個問題 –