0

特定の方法でデータベースからデータを印刷する必要があるプロジェクトに取り組んでいます。例を挙げてみましょう。私のデータベースには、以下のエントリしかないとします-

Framework 1.0.0
BundleB 1.0.0
BundleC 1.0.0

次に、上記のデータのマップを返すデータベースを呼び出す Java メソッド。

私の地図は以下のように上記のデータを持っています-

Key as Framework, Value as 1.0.0
Key as BundleB, Value as 1.0.0
Key as BundleC, Value as 1.0.0

私が初めてプログラムを開始したと仮定すると、以下のコードでこのように出力されますが、これはまったく問題ありません。

Framework - 1.0.0

そして、データベースを呼び出してデータベースからすべてのデータを再度取得するバックグラウンド スレッドを 2 秒ごとに実行しています。そして、2秒ごとに、以下と同じものが出力されます-(これは私が望むものではありません)

Framework - 1.0.0

Framework - 1.0.0プログラムを実行しているときに初めて印刷したいのですが、バックグラウンド スレッドが実行されているときに 2 回目は、そのフレームワークのバージョンが変更された場合にのみ印刷する必要があります。それ以外の場合は何も印刷しません。

しばらくして、誰かがデータベースのバージョン情報を次のように変更した場合-

Framework 1.0.1
BundleB 1.0.0
BundleC 1.0.0

次に、このように印刷する必要があります-

Framework - 1.0.1

質問が十分に明確であることを願っています。以下は、これまでの私のコードです。

public class Test {

    public static Map<String, String> bundleList = new LinkedHashMap<String, String>();

    private static Map<String, String> oldBundleList = new LinkedHashMap<String, String>();


    public static void main(String[] args) {

        getAttributesFromDatabase();

        loggingAfterEveryXMilliseconds();

    }


    private static void getAttributesFromDatabase() {

        Map<String, String> bundleInformation = new LinkedHashMap<String, String>();

        bundleInformation = getFromDatabase();
        if(!bundleInformation.isEmpty()) {
            oldBundleList = bundleList;
            bundleList = bundleInformation;
        }

        final Map<String, MapDifference.ValueDifference<String>> entriesDiffering = Maps.difference(oldBundleList, bundleList).entriesDiffering();
        if (!entriesDiffering.isEmpty()) {
            for (String key : entriesDiffering.keySet()) {
                bundleList.put(key, bundleList.get(key));
            } 
        }

        String version = bundleList.get("Framework");
        printOutZeroInformation("Framework", version);
    }

    private static void printOutZeroInformation(String string, String version) {
        System.out.println(string+" - "+version);       
    }

    private static Map<String, String> getFromDatabase() {

        Map<String, String> hello = new LinkedHashMap<String, String>();

        String version0 = "1.0.0";
        String version1 = "1.0.0";
        String version2 = "1.0.0";

        hello.put("Framework", version0);
        hello.put("BundleA", version1);
        hello.put("BundleB", version2);

        return hello;
    }

    private static void loggingAfterEveryXMilliseconds() {
        new Thread() {
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException ex) {

                    }
                    getAttributesFromDatabase();
                }
            }
        }.start();
    }
}

これについての助けをいただければ幸いです。

4

1 に答える 1