получить значение из хеш-таблицы, где ключ ArrayList <String>, а поиск String - PullRequest
0 голосов
/ 20 мая 2018

Я отправил хэш-таблицу строку и проверил ее ключи (которые являются ArrayList).Если ArrayList содержит данную строку, вернуть значение ключа.

package com;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;

public class TestMain {
    private static final String str1 = "n";
    private static final String str2 = "north";
    private static final Hashtable<ArrayList<String>,String> compassDirection = new Hashtable<ArrayList<String>,String>() {{
        put(new ArrayList<>(Arrays.asList("n", "north")), "North");
        put(new ArrayList<>(Arrays.asList("s", "south")), "South");
        put(new ArrayList<>(Arrays.asList("e", "east")), "East");
        put(new ArrayList<>(Arrays.asList("w", "west")), "West");
    }};

    public static void main(String[] args) {
        // print str1 as "North" from hashtable call
        // print str2 as "North" from hashtable call
    }
}

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Используйте мультикарту из гуавы.Вы можете заполнить его ключом = "Север" и значениями ["n", "север"].Затем вызовите invert для Multimap, который даст вам другую карту с key = "n" со значениями ["North"] и key = "north" со значениями = ["North"].Это позволяет вам вводить значения в нужном формате, а затем генерировать из него карту, которая позволяет вам выполнять поиск, как вы хотите.

В качестве альтернативы введите значения, аналогичные приведенным выше, но используйте

 Map<String, List<String>>

и напишите свой собственный метод инвертирования, который возвращает

Map<String, String>. 
0 голосов
/ 20 мая 2018

Полагаю, что сейчас я использую обходной путь:

package com;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;

public class TestMain {
    private static final String str1 = "n";
    private static final String str2 = "north";
    private static final Hashtable<String,String> compassDirection = new Hashtable<String,String>() {{
        put("n", "North");
        put("north", "North");
        put("s", "South");
        put("south", "South");
        put("e", "East");
        put("east", "East");
        put("w", "West");
        put("west", "West");
    }};

    public static void main(String[] args) {
        System.out.println(compassDirection.get(str1));
        System.out.println(compassDirection.get(str2));
    }
}

Но все равно было бы неплохо узнать, выполним ли вопрос с использованием ArrayList.

...