Java 8 使用Java 8功能比较2个整数数组

Java 8 使用Java 8功能比较2个整数数组,java-8,Java 8,是否可以在没有外部foreach的情况下迭代b。需要使用Java 8识别2个Aray中的公共值 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 如果您只需要公共值(即不考虑重复值),我建议使用集合 整数a

是否可以在没有外部foreach的情况下迭代b。需要使用Java 8识别2个Aray中的公共值

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

如果您只需要公共值(即不考虑重复值),我建议使用集合

整数a[]={1,2,3,4};
整数b[]={9,8,2,3};
Set aSet=newhashset(Arrays.asList(a));
Set bSet=newhashset(Arrays.asList(b));
aSet.保留(bSet);

如果您只需要公共值(即不考虑重复值),我建议使用集合

整数a[]={1,2,3,4};
整数b[]={9,8,2,3};
Set aSet=newhashset(Arrays.asList(a));
Set bSet=newhashset(Arrays.asList(b));
aSet.保留(bSet);

可能是这样的:

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);
}
publicstaticvoidmain(字符串[]args){
整数a[]={1,2,3,4};
整数b[]={9,8,2,3};
Stream as=Arrays.Stream(a).distinct();
Stream bs=Arrays.Stream(b.distinct();
List 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());
系统输出打印项次(收集);
}
  • 我们将两个数组合并成一个流
  • groupBy
    按值计数
  • 然后我们过滤长度大于1的列表,该列表包含重复项
  • 映射到键以提取重复条目的值
  • 打印出来

编辑:向初始流添加不同的内容。

可能类似于以下内容:

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);
}
publicstaticvoidmain(字符串[]args){
整数a[]={1,2,3,4};
整数b[]={9,8,2,3};
Stream as=Arrays.Stream(a).distinct();
Stream bs=Arrays.Stream(b.distinct();
List 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());
系统输出打印项次(收集);
}
  • 我们将两个数组合并成一个流
  • groupBy
    按值计数
  • 然后我们过滤长度大于1的列表,该列表包含重复项
  • 映射到键以提取重复条目的值
  • 打印出来

编辑:在初始流中添加不同的值。

如果你做a={1,1}和b={2,3},它会说1在a和b中都是,这是错误添加的不同值来修复这个问题如果你做a={1,1}和b={2,3},它会说1在a和b中都是,这是错误添加的不同值来修复这个问题参见
a1->(a1.compareTo(b1)==0)
a1->a1.equals(b1)
相当模糊。顺便说一下,您还可以使用
谓词.isEqual(b1)
或者,如果您可以确保数组中不会出现
null
b1::equals
@Tunaki:这些引用非常糟糕。在这两种情况下,被接受的答案实际上都与问题不匹配。参见
a1->(a1.compareTo(b1)==0)
是一种相当模糊的说法,可以说
a1->a1.equals(b1)
。顺便说一下,您还可以使用
谓词.isEqual(b1)
或者,如果您可以确保数组中不会出现
null
b1::equals
@Tunaki:这些引用非常糟糕。在这两种情况下,被接受的答案实际上与问题不匹配。