2016-04-09 4 views
2

Новое на Java 8, и я не могу понять это. У меня есть две карты типа TreeMap<Long, Integer>, одна называется patternMap, а другая answerMap.Как проверить, является ли TreeMap подкапом другой TreeMap в Java

patternMap жестко закодировано искать определенный шаблон пар ключ-значение, так что есть много patternMap «s, и их размер всегда меньше или равна answerMap. Я хотел бы проверить, какие patternMap s являются совпадением в answerMap, и я имею в виду, что мне нужно точное совпадение по ключу и значению как, так и не только.

Я не могу использовать метод submap, потому что patternMap может не иметь непрерывного диапазона ключей. Очевидным способом является пройти через patternMap и проверить каждый объект Map.Entry с помощью метода equals. Тем не менее, у меня есть много patternMap для проверки на конкретный answerMap, поэтому мне любопытно узнать, есть ли лучший способ, возможно, используя lambdas/streams. Я также не могу изменить answerMap или patternMap, так что это должна быть не мутирующая функция. Я использую TreeMap, потому что заказ имеет важное значение для приложения.

Там нет кода здесь, потому что я не нашел способ сделать это, но псевдо-код будет выглядеть следующим образом:

for every patternMap in the Collection { 
    if answerMap contains patternMap, make a note 
} 

EDIT: Вот некоторые определения (это не работает код , но мы надеемся, делает вопрос яснее:

private static final TreeMap<Long, Integer> patternMap1; 
private static final TreeMap<Long, Integer> patternMap2; 
private static final ArrayList<TreeMap> listOfPatternMaps; 
private TreeMap<Long, Integer> answerMap; 

    private Set<TreeMap<Long, Integer>> findPatterns(TreeMap answerMap) { 
     this.answerMap = answerMap; 
     for(patternMap : listOfPatternMaps) { 
      if answerMap contains patternMap { 
       make a note 
      } 
     } 
     return setOfMatchedPatterns; 
    } 
+0

Когда вы делаете 'если answerMap содержит patternMap', это относится ко всем парам ключ-значение в шаблоне шаблонов, соответствующих некоторому подмножеству answerMap? – smac89

+0

Было бы полезно увидеть определения answerMap и patternMap, видя, что фактический код лучше, чем чтение об этом. –

+0

Возможный дубликат [Объединить несколько коллекций в одну логическую коллекцию?] (Http://stackoverflow.com/questions/4896662/combine-multiple-collections-into-a-single-logical-collection) – smac89

ответ

5

Это должно сделать трюк:

answerMap.entrySet().containsAll(patternMap.entrySet()) 
+0

большое спасибо! – aaaaarrrgghhh

Смежные вопросы