假設我有一個物件陣列串列中的資料復合鍵值 = [["READ", "3GPP_ACCESS"], ["CREATE", "NON_3GPP"], ["READ", "3GPP_ACCESS"], ["MODIFY", “NON_3GPP”]]
List<Object> compositeKeyValues = new ArrayList<>();
我想識別包含相同值的外部串列中的重復串列,例如在索引 0 和 2 處,串列是相同的。我如何識別串列中的類似內容?
uj5u.com熱心網友回復:
事實上,你有:
List<List<String>> compositeKeyValues;
如果串列具有相同順序的相同元素,則串列是相等的 - 就像您的示例一樣。
查找重復的內部串列與查找其他更簡單型別的重復項沒有什么不同。
這是一種方法:
List<List<String>> duplicates = compositeKeyValues.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
.filter(e -> e.getValue().intValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
即使您將 List 的型別保留為List<Object>,此代碼也將起作用,但結果也將具有 type List<Object>。但是,建議使用更具體的型別,并且更有用List<List<String>>。
uj5u.com熱心網友回復:
我首先不會列出通用Object實體,因為這會使完成變得更加困難。將物件串列改為屬于特定類。然后,您的自定義類必須覆寫物件equal()和hashCode()方法。
現在的問題是,如何實作實際洗掉重復項的最簡單方法。簡單的答案是將您List的Set. 我認為這樣的事情應該有效。
Set<SomeType> mySet = myList.findByType(type)
.stream()
.map(ClassName::getValue)
.collect(Collectors.toSet());
請記住,我提到的方法仍然需要被覆寫。大多數(如果不是全部)現代 IDE 都有方便的方法來覆寫equals()和 hashCode() 方法。
uj5u.com熱心網友回復:
即使最初的問題是關于串列,我也想貢獻一個基于陣列的解決方案。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[][] data = { { "READ", "3GPP_ACCESS" }, { "CREATE", "NON_3GPP" }, { "READ", "3GPP_ACCESS" },
{ "MODIFY", "NON_3GPP" } };
for (int i = 0; i < data.length; i )
for (int j = i 1; j < data.length; j ) {// should not compare with itself and anything previously else
// there will be double findings like 0,2 and 2,0
if (Arrays.equals(data[i], data[j])) // check for equality
System.out.println("Match found at " i " " Arrays.toString(data[i]) " and " j " "
Arrays.toString(data[j]));
}
}
}
uj5u.com熱心網友回復:
嘗試這個:
java.util.List<String> list = Arrays.asList("READ", "3GPP_ACCESS","CREATE", "NON_3GPP","READ", "3GPP_ACCESS","MODIFY", "NON_3GPP");
for (int i = 0; i < list.size(); i ) {
for (int j = i 1; j <list.size() ; j ) {
if(list.get(i).equals(list.get(j))){
System.out.println(list.get(i));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370494.html
