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 = 3
中 C
的计数,请使用 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/