0

HashMap に一連の要素が格納されています。そのため、値を比較する必要があり、取得した値が特定の値よりも大きい場合は、Group-n (n = n 番目のグループを表す) にグループ化する必要があります。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class GroupTag{

    public static void main(String[] args) 
    {   
        Map<String, Integer> myMap = new HashMap<String, Integer>();
        myMap.put("0-1", 33);
        myMap.put("0-2", 29);
        myMap.put("0-3", 14);
        myMap.put("0-4", 8);
        myMap.put("1-2", 41);
        myMap.put("1-3", 15);
        myMap.put("1-4", 17);
        myMap.put("2-3", 1);
        myMap.put("2-4", 16);
        myMap.put("3-4", 18);

        for(int i = 0; i < 5; i++)
        {
            for(int j = i+1; j < 4; j++)
            {
                String testLine = i+"-"+j; 
                int itemA = myMap.get(testLine);
                boolean greaterThanAll = true;

                for(int k = j+1; k < 5; k++)
                {
                    String newLine = j+"-"+k;
                    int itemB = myMap.get(newLine);

                    if(itemA <= itemB)
                    {       
                        //Condition: e.g IF and ONLY IF all myMap.get(0-1)>than myMap.get(1-2), 
                        //myMap.get(1-3),myMap.get(1-n)
                        //THEN trigger an event to group ALL of myMap.get(1-n) to myMap.get(0-1)
                        //THEN remove all the values that satisfied the condition from the HashMap list
                        greaterThanAll = false;
                        break;
                    }
                }  

                if (greaterThanAll) 
                {
                    for(int m = j+1; m < 5; m++)
                    {
                         String removeLine = j+"-"+m;
                         //Group myMap.get(removeLine) to myMap.get(testLine)
                         //myMap.remove(removeLine);
                         System.out.println("Index " + removeLine + " : " +  myMap.get(removeLine));
                    }
                    //myMap.remove(testLine);
                    System.out.println("Main Index " + testLine + " : " +  myMap.get(testLine));
                }
            }       
        }
    }
}

Example of how the element are compared:
IF myMap.get("0-1")>myMap.get("1-n"): Grouped to Group 0 and REMOVE both values from list
IF myMap.get("0-2")>myMap.get("2-n"): Grouped to Group 1 and REMOVE both values from list
IF myMap.get("0-3")>myMap.get("3-n"): Grouped to Group 2 and REMOVE both values from list
THEN the loop goes on to compare myMap.get("1-2")>myMap.get("2-n") and so on..

Desired outcome:
Retrieve number of Groups: 2
Retrieve size of Group 0: 3
Retrieve elements in Group 1: [1, 16]

基本的に、一連の要素またはデータをまとめてグループ化/保存する方法が必要ですか?

編集:条件を投稿しました。いくつかの要素をグループ化したかっただけなので、条件を除外する方が簡単だと思いました。

4

2 に答える 2

2

まず第一に、あなたの要件に必要な文字列キーを構築していますか? マップを反復して、値が数値よりも大きいかどうかを調べる方が簡単ではないでしょうか?

探しているのはLambdaJかもしれません (Java がネイティブの Lambda 式を取得するまで)。

于 2012-09-16T07:49:45.343 に答える
0

参照: http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html#subSet(E , boolean, E, boolean)

TreeSet では、subset() 操作を使用できます。

public NavigableSet<E> subSet(E fromElement,
                                      boolean fromInclusive,
                                      E toElement,
                                      boolean toInclusive)

    OR

public SortedSet<E> subSet(E fromElement,
                               E toElement)
于 2012-09-16T08:08:10.103 に答える