[英]How to find unique value of a column of a 2D ArrayList in java?
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"}
的映射作為鍵集,值將為您提供給定列中每個字符的計數。 它也適用於非均勻矩陣,因為它只會跳過沒有第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();
你的問題沒有編譯。 假設您已按如下方式定義列表,則可以使用以下內容輕松找到第3列中的不同值。 這里我們只是映射第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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.