私はフォームを持つ多くのペアを持っています:
- itemid コア
- 1 2
- 1 4
- 1 3
- 2 2
- 2 5
他の itemid 結果の最大スコアを取得したい
- itemid コア
- 1 4
- 2 5
解決?
私はフォームを持つ多くのペアを持っています:
他の itemid 結果の最大スコアを取得したい
解決?
これにより、ペアのソートされたリストが得られます。ここでは、コアの昇順でソートされています。
package com.pair.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
List<Pair> list = new ArrayList<Pair>();
list.add(new Pair(1, 2));
list.add(new Pair(1, 4));
list.add(new Pair(1, 3));
list.add(new Pair(2, 2));
list.add(new Pair(2, 5));
Collections.sort(list);
System.out.println(list);
}
}
class Pair implements Comparable<Pair>{
public Pair(int i, int j) {
itemId = i;
core = j;
}
Integer itemId;
Integer core;
@Override
public String toString(){
return itemId + " " + core;
}
public int compareTo(Pair compare) {
return core.compareTo(compare.core);
}
}
aMap<Integer, Integer>
をitemid
キーとして、その値として使用し、各反復で現在の最大値を新しい とmax(core)
比較します。core
Map<Integer, Integer> maxMap = new HashMap<Integer, Integer>();
int[][] pairs = {
{ 1, 2 },
{ 1, 4 },
{ 1, 3 },
{ 2, 2 },
{ 2, 5 }
};
// Calculate max value for each itemid
for (int i = 0; i < pairs.length; i++) {
int[] pair = pairs[i];
Integer currentMax = maxMap.get(pair[0]);
if (currentMax == null) {
currentMax = Integer.MIN_VALUE;
}
maxMap.put(pair[0], Math.max(pair[1], currentMax));
}
// Print them
for (Integer itemId : maxMap.keySet()) {
System.out.printf("%d %d\n", itemId, maxMap.get(itemId));
}
これは印刷されます:
1 4
2 5
デモ。
アイテムのリストを最初に itemid で並べ替え、itemid が等しい場合は次にコアで並べ替えることができます。リストを並べ替えたら、すべての要素を通過し、等しい itemid の最大値を取得するのに O(n) かかります。実際のコードが必要な場合はお知らせください。
それがSQLなら。itemid によるテーブル グループから itemid, max(core) を選択します。