特定の方法でデータベースからデータを印刷する必要があるプロジェクトに取り組んでいます。例を挙げてみましょう。私のデータベースには、以下のエントリしかないとします-
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();
}
}
これについての助けをいただければ幸いです。