@SuppressWarnings("unchecked")
	public static <K, V> Map<K, V> edit(Map<K, V> map, Editor<Entry<K, V>> editor) {
		if (null == map || null == editor) {
			return map;
		}

		Map<K, V> map2 = ReflectUtil.newInstanceIfPossible(map.getClass());
		if (null == map2) {
			map2 = new HashMap<>(map.size(), 1f);
		}
		if (isEmpty(map)) {
			return map2;
		}

		// issue#3162@Github，在构造中put值，会导致新建map带有值内容，此处清空
		if (false == map2.isEmpty()) {
			map2.clear();
		}

		Entry<K, V> modified;
		for (Entry<K, V> entry : map.entrySet()) {
			modified = editor.edit(entry);
			if (null != modified) {
				map2.put(modified.getKey(), modified.getValue());
			}
		}
		return map2;
	}
@Test
	public void editTest() {
		final Map<String, String> map = MapUtil.newHashMap();
		map.put("a", "1");
		map.put("b", "2");
		map.put("c", "3");
		map.put("d", "4");

		final Map<String, String> map2 = MapUtil.edit(map, t -> {
			// 修改每个值使之*10
			t.setValue(t.getValue() + "0");
			return t;
		});

		assertEquals(4, map2.size());

		assertEquals("10", map2.get("a"));
		assertEquals("20", map2.get("b"));
		assertEquals("30", map2.get("c"));
		assertEquals("40", map2.get("d"));
	}