Java 8 使用Java 8功能比较2个整数数组
是否可以在没有外部foreach的情况下迭代b。需要使用Java 8识别2个Aray中的公共值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
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:这些引用非常糟糕。在这两种情况下,被接受的答案实际上与问题不匹配。