List<int[]> bigList = new ArrayList<int[]>();
List<int[]> smallList = new ArrayList<int[]>();

我需要使用两个列表的公共数组生成int []类型的List。(值应相等,而不使用contains())

如何在Java流中有效地做到这一点?

最佳答案

如果确实需要流解决方案,请使用以下解决方案:

List<int[]> intersection=bigList.stream().map(IntBuffer::wrap)
    .filter(b->smallList.stream().map(IntBuffer::wrap).anyMatch(b::equals))
    .map(IntBuffer::array)
    .collect(Collectors.toList());

但是最多执行bigList.size()×smallList.size()操作并不能真正有效。因此,强烈建议您不要采用即时操作,而应采用中间Set存储:
Set<IntBuffer> bigSet=bigList.stream().map(IntBuffer::wrap).collect(Collectors.toSet());
List<int[]> intersection=smallList.stream().map(IntBuffer::wrap)
     .filter(bigSet::contains).map(IntBuffer::array).collect(Collectors.toList());

请注意,您不应使用List进行设置操作。未指定源和结果排序的语义以及如何处理源列表中的重复项。

10-06 05:14