java - java - 如何在java中找到2D ArrayList的列的唯一值?
问题描述
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 列的唯一元素,哪些是第 3 列"C","G"
中的2
唯一元素。
这可以使用loop
但我不能使用循环来完成。使用javastream
可能有一个解决方案。
此外,我如何才能一次获得"A","B"
列1,2
中的行数,并且通常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"}
作为键集的地图,而 values 将为您提供给定列中每个字符的计数。它也适用于非均匀矩阵,因为它只会跳过没有第 n 列的行。
任何列的唯一计数将取决于 collect 方法生成的映射的大小;countMapOfColumn.size()
要获取单个字符计数,请使用带有键的结果映射作为输入,例如获取C
in column = 3
、 use的计数countMapOfColumn.get("C")
,这将返回2
但我宁愿使用 Guava's 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();
推荐阅读
- python - 在规范化期间屏蔽 0 值
- ios - NavigationView 中意外填充 Swift UI 列表
- swift - 在 ios 应用程序中打开任何电子邮件附件
- amazon-web-services - AWS Amplify ci/cd 在测试阶段挂起
- python - 如何将熊猫系列的列值转换为Python中的列表?
- conditional-statements - 如何在火花流中删除其他结果?
- laravel - Laravel:调用自定义外观的问题
- java - 如何获取 TypeLiteral 绑定或可以说来自注入器的实例 [Google Guice]
- android-studio - 如何水平定义 RadioListTitles?
- javascript - 强制 Pixi.js WebGl 始终使用新的画布来解决在没有清除浏览器缓存的情况下重新加载页面后出现的错误