Вы можете использовать новые методы в Java 8, такие как putIfAbsent
, чтобы добавить новую запись, если ключ отсутствует, и computeIfPresent
, чтобы добавить значения к существующему ключуmap.
Примером может быть:
public static void main(String[] args) {
Map<String, String[]> test = new HashMap<>();
String deptname = "Department";
String[] empnames = {"Test1", "Test2"};
if (deptname != null){
test.putIfAbsent(deptname, empnames);
test.computeIfPresent(deptname, (dept, value) -> {
List<String> list = new ArrayList<>(Arrays.asList(value));
list.add("Test3");
value = list.toArray(value);
return value;
});
}
for(String s : test.get("Department")){
System.out.println(s);
}
}
Здесь putIfAbsent
проверяет наличие ключа, если нет, добавляет новую запись значения ключа.С другой стороны, computeIfAbsent
проверяет, присутствует ли ключ, и если да, он вычисляет новое значение для существующей записи значения ключа.
Вывод вышеуказанного кода:
Test1
Test2
Test3
Это потому, что изначально ключ Department
не присутствовал на карте test
, поэтому он был добавлен к нему вместе со значением empnames
в виде массива.
Во второй операцииМетод computeIfPresent
проверил, что ключ Department
уже был на карте, поэтому он добавил новую строку Test3
к существующему массиву значений [Test1, Test2]
.
То же самое можно сделать для List
вместо массива:
public static void main(String[] args) {
Map<String, List<String>> test = new HashMap<>();
String deptname = "Department";
List<String> empnames = new ArrayList(Arrays.asList("Test1", "Test2"));
if (deptname != null){
test.putIfAbsent(deptname, empnames);
test.computeIfPresent(deptname, (dept, value) -> {
value.add("Test3");
return value;
});
}
for(String s : test.get("Department")){
System.out.println(s);
}
}