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
可能有解决方案。
此外,我如何才能一次获得"A","B"
列中1,2
列中有N
的行数?
答案 0 :(得分:8)
对于您给定的数据结构;
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"}
作为键集的映射,而值将为您提供给定列中每个字符的计数。它也将适用于非统一矩阵,因为它只会跳过没有第n列的行。
任何列的唯一计数将成为collect方法的结果图的大小; countMapOfColumn.size()
要获取单个字符计数,请使用键作为输入的结果映射,例如要获取C
中column = 3
的计数,请使用countMapOfColumn.get("C")
,它将返回{{1} }
但是我宁愿使用番石榴的2
,您可以直接选择任何给定的行或列而没有任何麻烦,只有它,获取第n列,并过滤我们的重复项。
更新
获取以连续列表Table
开头的行数;
list = {"A", "B"}
答案 1 :(得分:2)
您的问题无法编译。假设您按以下方式定义了列表,则可以使用以下内容在第3列中轻松找到不同的值。在这里,我们只是映射第三列(通过使用索引2),然后将.distinct()
应用于结果流。
List<List<String>> list = Arrays.asList(Arrays.asList("A", "B", "C"),
Arrays.asList("E", "F", "G"),
Arrays.asList("A", "B", "C"));
List<String> distinct = list.stream().map(a -> a.get(2))
.distinct().collect(Collectors.toList());
当您打印出元素时,将输出:
C
G
您可以使用相同的逻辑,使用相同的逻辑在第3列中查找“ C”的计数。
list.stream().map(a -> a.get(2)).filter(i -> i.contains("C")).count();