forked from fanruan/design
Browse Source
* commit '9cf069a24a53e3d22adc940f0bcda1d3c0df89ea': updated REPORT-68607 数据连接全量保存改为增量保存research/10.0
superman
3 years ago
3 changed files with 136 additions and 11 deletions
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.design.data; |
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull; |
||||||
|
|
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author rinoux |
||||||
|
* @version 10.0 |
||||||
|
* Created by rinoux on 2022/3/28 |
||||||
|
*/ |
||||||
|
public final class MapCompareUtils { |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 对比两个map 查找出相比orig,other中有哪些是新增的、删除的或者被修改的,并分别进行处理 |
||||||
|
* |
||||||
|
* @param orig 原始map |
||||||
|
* @param other 参考的新map |
||||||
|
* @param eventHandler 有区别时的事件处理器 |
||||||
|
* @param <K> K |
||||||
|
* @param <V> V |
||||||
|
*/ |
||||||
|
public static <K, V> void contrastMapEntries(@NotNull Map<K, V> orig, @NotNull Map<K, V> other, @NotNull EventHandler<K, V> eventHandler) { |
||||||
|
|
||||||
|
Map<K, V> copiedOrig = new LinkedHashMap<>(orig); |
||||||
|
|
||||||
|
other.forEach((k, v) -> { |
||||||
|
V existedV = copiedOrig.remove(k); |
||||||
|
if (existedV != null) { |
||||||
|
if (!v.equals(existedV)) { |
||||||
|
eventHandler.on(EntryEventKind.UPDATED, k, v); |
||||||
|
} |
||||||
|
} else { |
||||||
|
eventHandler.on(EntryEventKind.ADDED, k, v); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
copiedOrig.forEach((k, v) -> eventHandler.on(EntryEventKind.REMOVED, k, v)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public interface EventHandler<K, V> { |
||||||
|
void on(EntryEventKind entryEventKind, K k, V v); |
||||||
|
} |
||||||
|
|
||||||
|
public enum EntryEventKind { |
||||||
|
ADDED, |
||||||
|
REMOVED, |
||||||
|
UPDATED; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package com.fr.design.data; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author rinoux |
||||||
|
* @version 10.0 |
||||||
|
* Created by rinoux on 2022/3/28 |
||||||
|
*/ |
||||||
|
public class MapCompareUtilsTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void contrastMapEntries() { |
||||||
|
|
||||||
|
|
||||||
|
Map<String, String> orig = new LinkedHashMap<>(); |
||||||
|
|
||||||
|
orig.put("aaa", "aaa"); |
||||||
|
orig.put("bbb", "bbb"); |
||||||
|
orig.put("ccc", "ccc"); |
||||||
|
orig.put("ddd", "ddd"); |
||||||
|
|
||||||
|
|
||||||
|
Map<String, String> other = new LinkedHashMap<>(); |
||||||
|
|
||||||
|
other.put("aaa", "111"); |
||||||
|
other.put("bbb", "bbb"); |
||||||
|
other.put("ccc", "ccc"); |
||||||
|
other.put("eee", "eee"); |
||||||
|
|
||||||
|
|
||||||
|
MapCompareUtils.contrastMapEntries(orig, other, new MapCompareUtils.EventHandler<String, String>() { |
||||||
|
@Override |
||||||
|
public void on(MapCompareUtils.EntryEventKind entryEventKind, String s, String s2) { |
||||||
|
switch (entryEventKind) { |
||||||
|
case UPDATED: |
||||||
|
Assert.assertEquals(s, "aaa"); |
||||||
|
Assert.assertEquals(s2, "111"); |
||||||
|
break; |
||||||
|
case REMOVED: |
||||||
|
Assert.assertEquals(s, "ddd"); |
||||||
|
break; |
||||||
|
case ADDED: |
||||||
|
Assert.assertEquals(s, "eee"); |
||||||
|
Assert.assertEquals(s2, "eee"); |
||||||
|
break; |
||||||
|
default: |
||||||
|
Assert.fail(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue