Размещение заполнителей в списке ключ / значение на основе набора ключей в Java - PullRequest
0 голосов
/ 15 января 2010

У меня есть Набор ключей и Список пар ключ / значение. Значения имеют вид Long, BigInteger.

// key/values pairs: Long,BigInteger
List<Object[]> values;
// id list that corresponds to the keys for the list above
Set<Long> ids;

Если какой-либо элемент набора ключей не существует в качестве ключа в списке ключ / значение, я хочу добавить его в список со значением 0.

Какой хороший способ сделать это на Java?

Ответы [ 3 ]

4 голосов
/ 15 января 2010

Различные комментаторы, предлагающие карты, дают хорошее представление. Как насчет вместо

List<Object[]> values 

вы используете

Map<Long, BigInteger> values

В этом случае:

for(Long id : ids) {
    if(!values.containsKey(id)) {
        values.put(id, BigInteger.ZERO);
    }
}

Фактически, даже если код, который должен быть сохранен, как написано, я бы подумал об использовании карты для манипуляции, предварительно обработав список в карте, а затем сбросив его обратно в список массивов объектов.

3 голосов
/ 15 января 2010

Какой хороший способ сделать это в Java?

Заменить Set<Long> и List<Object[]> на Map<Long, BigInteger>. Если порядок не важен, используйте HashMap. Если вы хотите автоматически сортировать ключи, используйте TreeMap. Если вы хотите сохранить порядок вставки, используйте LinkedHashMap.

1021 * Е.Г. *

Map<Long, BigInteger> unorderedMap = new HashMap<Long, BigInteger>();
Map<Long, BigInteger> orderedByKeys = new TreeMap<Long, BigInteger>();
Map<Long, BigInteger> orderedByInsertion = new LinkedHashMap<Long, BigInteger>();

Таким образом, вы можете просто использовать любой из методов Map для обработки пар ключ / значение. Э.Г.

Long key = 1L;
BigInteger value = map.get(key);
if (value == null) {
    value = new BigInteger(0);
    map.put(key, value);
}

Вы даже можете получить все ключи по Map#keySet():

Set<Long> keys = map.keySet();

Чтобы узнать больше о картах, обратитесь к Самому учебному пособию Sun по этому вопросу.

1 голос
/ 15 января 2010

Я думаю, что вы хотите использовать что-то похожее на одну из реализаций Google Collections Multimap .Не изобретай велосипед.Я подозреваю, что в Apache Commons есть нечто похожее, но я предпочитаю библиотеку Google.

Запрос ключа, у которого нет значений, возвращает пустую коллекцию.

EDIT: параметры для порядка сортировки, уникальностии т.д. все доступно, просто выберите правильную реализацию в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...