解决此问题的最佳方法是什么?我想在运行我的应用程序时第一次调用特定方法,但第二次应该只在有任何更改时调用它。如果没有变化,那么我不想调用该方法。
我想process
在运行我的应用程序时第一次调用方法,它应该像这样打印出来——我不想在调用中使用TestingFramework
条目。process method
{Answer-A=1.0.0, Answer-B=1.0.0}
但在那之后我有一个后台线程运行,它将getAttributesFromDatabase
再次调用方法,所以现在我只想打印出改变的信息,但如果没有改变,那么我不想process
再次调用方法。
假设任何一个值都改变了Animal-A
or Animal-B
,那么它应该只打印出更改信息。
举个例子——假设我的后台线程第二次运行时,map条目是这样的,没有任何变化——
TestingFramework 1.0.0
Answer-A 1.0.0
Asnwer-B 1.0.0
然后我不想再次调用 process 方法,因为没有变化。但不知何故,假设值条目已更改为Answer-A
or Answer-B
,那么那时,我想使用已更改的条目调用 process 方法。
我希望这个问题足够清楚。
public static Map<String, String> frameworkInfo = new LinkedHashMap<String, String>();
public static Map<String, String> bundleList = new LinkedHashMap<String, String>();
public static Map<String, String> newBundleList = 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(TestingFrameworkInfo.get("TestingFramework") != (bundleInformation.get("TestingFramework"))) {
TestingFrameworkInfo.put("TestingFramework", bundleInformation.get("TestingFramework"));
String version = TestingFrameworkInfo.get("TestingFramework");
printTestingFrameworkBundle("TestingFramework", version);
}
bundleInformation.remove("TestingFramework");
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()) {
newBundleList.put(key, bundleList.get(key));
System.out.println("{" + key + "=" + bundleList.get(key) + "}");
}
process(newBundleList);
}
process(bundleList);
}
private static void process(final Map<String, String> test) {
System.out.println(test);
}
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("TestingFramework", version0);
hello.put("Answer-A", version1);
hello.put("Answer-B", version2);
return hello;
}
private static void loggingAfterEveryXMilliseconds() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
getAttributesFromDatabase();
}
}
}.start();
}
使用下面的代码,我有,它会在没有变化的情况下第一次和第二次调用 process 方法,然后再次调用我根本不想要的 process 方法。有人可以帮我吗?
我很确定,我在这里遗漏了一件关键的事情,然后我猜它会开始工作。
更新:-
我仍在努力。有人可以帮我吗?