我需要找出屬於另一個元素的最大元素。給你一個例子是最清楚的。基於另一個列表中元素的最大值
我有一個包含以下數據List<String> lines
:
1, 1, A, Aaa ...
1, 2, A, Aaa ...
1, 4, A, Aaa ...
2, 5, B, Bbb ...
2, 3, B, Bbb ...
3, 6, C, Ccc ...
4, 7, D, Ddd ...
5, 8, E, Eee ...
1, 9, A, Aaa ...
4, 10, D, Ddd ...
需要明確的是,兩對夫婦的數字永遠不會相同,所以你永遠不會得到:
1, 9, A, Aaa ...
1, 9, B, Bbb ...
我的目標是提取線最大的第二行屬於第一行。確切的說這些行:
1, 9, A, Aaa ...
2, 5, B, Bbb ...
3, 6, C, Ccc ...
4, 10, D, Ddd ...
5, 8, E, Eee ...
爲了證明你這不是一門功課,我已經使用多個for-loop
找到最大和存儲變量的解決方案。不過,我不知道它是否有效,因爲測試了大量數據(200 000+
)。
// List "lines" is declared above
List<List<String>> data = new ArrayList<>();
List<List<String>> maxValues = new ArrayList<>();
// clear and separate to clear comparable parts
for (String s: lines) {
String parts[] = s.trim().replace("\"", "").split(";");
List newList = Arrays.asList(parts);
data.add(newList);
}
// naïve algorithm to find the maximum dependent to the another one
// not sure if working
for (List l: data) {
int id = Integer.parseInt(l.get(0).toString());
int max = 0;
List<String> tempMaxValues = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
if (Integer.parseInt(l.get(0).toString()) == id) {
int temp = Integer.parseInt(l.get(1).toString());
if (temp > max) {
max = temp;
tempMaxValues = l;
}
}
}
maxValues.add(tempMaxValues);
}
此外,我需要做更多的計算結果。只有用Stream
或更簡單的方法纔有可能達到我想要的結果?即使在我的代碼中,我也迷迷糊糊。
有沒有不好的要求幫助做功課,不好的是沒有努力來制定自己的解決方案:) –
恐怕我不明白「屬於第一行的第二行的最大值」的含義。你可以擴展這個嗎? –
@Sasha Salauyou:這確實不是一項家庭作業。如果是這樣,我可以自由承認這一點。 :)我這樣做是我在以前的工作中遇到的挑戰,但我們在這種情況下使用了更好的SQL。 –