我能夠計算重複元素,但不是以有效的方式。基本上我有一個String類型的數組列表。例如:如何計算數組中重複元素的重複次數?
ArrayList<String> s=new ArrayList<String>();
如果I打印使用的foreach當時的輸出是:
[1,2]
[1,4]
[4]
[3,5]
什麼是一種有效的方法,當有多個陣列來計數數字的重複?任何形式的幫助表示讚賞。
最終輸出: 1重複2次。 2是1次重複。 等
我能夠計算重複元素,但不是以有效的方式。基本上我有一個String類型的數組列表。例如:如何計算數組中重複元素的重複次數?
ArrayList<String> s=new ArrayList<String>();
如果I打印使用的foreach當時的輸出是:
[1,2]
[1,4]
[4]
[3,5]
什麼是一種有效的方法,當有多個陣列來計數數字的重複?任何形式的幫助表示讚賞。
最終輸出: 1重複2次。 2是1次重複。 等
你可以使用a counting
collector:
public static void main(String[] args) {
List<String> s = Arrays.asList("[1,2]", "[1,4]", "[4]", "[3,5]");
Map<Integer, Long> occurences = s.stream()
.flatMap(abc::parseString)
.collect(groupingBy(i -> i, counting()));
System.out.println("occurences = " + occurences);
}
private static Stream<Integer> parseString(String s) {
String[] numbers = s.substring(1, s.length() - 1).split(",");
return Arrays.stream(numbers).map(Integer::parseInt);
}
輸出:
OCCURENCES = {1 = 2,2 = 1,3 = 1,4 = 2,5 = 1}
如果您願意使用第三方庫,您可以使用支持原始包的GS Collections。 Bag是一個數據結構,用於跟蹤每個獨特元素的出現情況。使用IntBag可以減少您在用例中需要的拳擊數量。
CharAdapter remove = CharAdapter.adapt("[]");
IntBag counts =
Lists.mutable.with("[1,2]", "[1,4]", "[4]", "[3,5]")
.asLazy()
.collectWith(StringIterate::rejectChar, remove::contains)
.flatCollect(StringIterate::csvTokensToList)
.collectInt(Integer::parseInt)
.toBag();
Assert.assertEquals(2, counts.occurrencesOf(1));
Assert.assertEquals(1, counts.occurrencesOf(2));
如果你需要值排序輸出,你可以使用一個SortedBag<Integer>
代替。但是請注意,這會導致將整數鑲嵌到整數。
CharAdapter remove = CharAdapter.adapt("[]");
SortedBag<Integer> counts =
Lists.mutable.with("[1,2]", "[1,4]", "[4]", "[3,5]")
.asLazy()
.collectWith(StringIterate::rejectChar, remove::contains)
.flatCollect(StringIterate::csvTokensToList)
.collect(Integer::parseInt)
.toSortedBag();
Assert.assertEquals(2, counts.occurrencesOf(1));
Assert.assertEquals(1, counts.occurrencesOf(2));
System.out.println(counts.toStringOfItemToCount());
輸出:
{1=2, 2=1, 3=1, 4=2, 5=1}
注:我在GS正宗開發商
請讓一個清晰的問題。顯示你的代碼。提供示例輸入+預期輸出。 – Manu
從'String'中提取數字並使用'Map'來計算每個數字的出現次數。 – SomeJavaGuy
如果這些數字的範圍很小,您甚至可以使用索引是數字的數組,數據是此數字的數量。否則,你可以使用一個HashMap – VicX