java - 如何在 java 中查找二维 ArrayList 的列的唯一值?

标签 java arraylist lambda java-8 java-stream

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Delete
{
    public static void main(String[] args)
    {
         List<List<String>> list = new ArrayList<>();
         list.add(List.of("A","B","C","R"));
         list.add(List.of("E","F","G","F"));
         list.add(List.of("A","B","C","D"));
         System.out.println(list.stream().distinct().count());
         Map<String, Long> countMapOfColumn = list.stream()
                                                  .filter(innerList -> innerList.size() >= 3)
                                                  .map(innerList -> innerList.get(3 - 1))
                         .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        System.out.println(countMapOfColumn.keySet());
    }
}

我想找出第 3 列的唯一元素 "C","G" 并且第 3 列中有 2 个唯一元素。

这可以使用 loop 来完成,但我不能使用循环。使用 java stream 可能会有一个解决方案。

此外,我如何一次获取 1,2 列中具有 "A","B" 的行数,一般来说 N 列?

最佳答案

对于给定的数据结构;

Map<String, Long> countMapOfColumn = list.stream()
        .filter(innerList -> innerList.size() >= column)
        .map(innerList -> innerList.get(column - 1))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

其中 column = 3,将为您提供一个以 {"C", "G"} 作为键集的 map ,而值将为您提供每个字符的计数在给定的列中。它也适用于非均匀矩阵,因为它只会跳过没有第 n 列的行。

任何列的唯一计数将是 collect 方法生成的映射的大小; countMapOfColumn.size()

要获取单个字符计数,请使用带有键的结果映射作为输入,例如,要获取 column = 3C 的计数,请使用 countMapOfColumn。 get("C"),它将返回 2

但我宁愿使用 Guava 的 Table,您可以直接选择任何给定的行或列而不会遇到任何麻烦,然后它只是获取第 n 列,并过滤我们的重复项。

更新

获取以连续列表开头的行数 list = {"A", "B"};

List<String> startingList = Arrays.asList("A", "B");
Long count = list.stream()
        .filter(innerList -> innerList.size() >= startingList.size() 
                && innerList.subList(0, startingList.size()).equals(startingList))
        .count();

关于java - 如何在 java 中查找二维 ArrayList 的列的唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53140579/

相关文章:

Angular 2 : Cannot find name 'Params'

java - Chrome 重新初始化 HttpSession

java - 在 Java 中打印一个星形正方形

java finally代码块总会被执行么

java - ArrayList.containsAll 不使用我的自定义 equals 函数

android - RecyclerView 项目样式应用于过滤后的所有项目

java - 了解数组列表的迭代

c++ - 如何在函数中调用lambda函数作为参数?

Java 正则表达式 : How to match all patterns including overlapping regex matches?

c# - 替换 lambda 表达式中的参数类型