Добрый день.
Требуется хранить пары данных — список комманд и результат их выполнения.
Результат выполнения может быть в виде нескольких строк; соответственно, нужен массив. Команды могут быть не уникальными.
Напрашивается конструкция HashMap<String,ArrayList<String>>, но в этой коллекции ключ должен быть уникальным.
Мне не подходит.
Подскажите, как можно реализовать.
Какие getKey? Что за getValue? Кто (включая автора через пару недель) этот бред разберёт?
public class CommandResultPair {
private String command;
private List<String> result;
...
// get, set, construct...
}
...
List<CommandResultPair> crps = new ArrayList<>();
while (...) {
String commnad = ...
List<String> result = ...
crps.add(new CommandResultPair(command, result));
}
...
for(CommandResultPair crp : crps) {
String command = crp.getCommand();
List<String> result = crp.getResult();
...
}
Сделал отдельный класс:
public class CommandResultPair {
private final String command;
private final ArrayList<String> result;
public CommandResultPair(String command, ArrayList<String> result) {
this.command = command;
this.result = result;
}
public String getCommand() { return command; }
public ArrayList<String> getResult() { return result; }
@Override
public int hashCode() { return command.hashCode() ^ result.hashCode(); }
@Override
public boolean equals(Object o) {
if (!(o instanceof CommandResultPair)) return false;
CommandResultPair pairo = (CommandResultPair) o;
return this.command.equals(pairo.getCommand()) &&
this.result.equals(pairo.getResult());
}}
Так проверяю:
public class ExampleCommanResultPair {
public static void main(String[] args) {
String str1 = "command1";
String str2 = "command2";
ArrayList<String> result1 = new ArrayList<String>();
result1.add("result1_line1");
result1.add("result1_line2");
ArrayList<String> result2 = new ArrayList<String>();
result2.add("result2_line1");
result2.add("result2_line2");
CommandResultPair cmd1 = new CommandResultPair(str1,result1);
CommandResultPair cmd2 = new CommandResultPair(str2,result2);
ArrayList <CommandResultPair> commandArray = new ArrayList<>();
commandArray.add(cmd1);
commandArray.add(cmd2);
commandArray.add(new CommandResultPair("command3",result1));
for (CommandResultPair cmdItr : commandArray){
System.out.println("Result for command \"" + cmdItr.getCommand() + "\"");
cmdItr.getResult().forEach((resultItr) -> {System.out.println( resultItr );} );
}
}}
Вывод:
Result for command "command1"
result1_line1
result1_line2
Result for command "command2"
result2_line1
result2_line2
Result for command "command3"
result1_line1
result1_line2
Вроде бы то, что нужно.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости