Эквивалентная функция карты Arduino в Java - PullRequest
16 голосов
/ 22 сентября 2011

Есть ли функция, аналогичная функции Map в Arduino для Java?

Мне нужно сопоставить диапазон значений с другим диапазоном значений, поэтому мне было интересно, есть личто-то похожее на это в Java, я искал, но я получаю только функцию карты Java.

Ответы [ 3 ]

23 голосов
/ 22 сентября 2011

Код map() из библиотеки Arduino таков:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Это будет работать в Java точно так же - никакой настоящей магии.Но в стандартной Java ничего подобного не предопределено.

2 голосов
/ 22 сентября 2011

Э-э, у Java нет функции 'Map', у нее есть тип Map в коллекциях (java.util) с несколькими реализациями. Но это всего лишь механизм хранения, в основном приводящий к парам ключ => значение. Основываясь на моем прочтении связанных с вами документов Arduino, вам потребуется реализовать собственный метод для сопоставления значения соответствующим образом.

0 голосов
/ 22 сентября 2011

Вы можете сделать что-то вроде этого:

Map<K,V> mapValues(Collection<K> keys, Collection<V> values) {
    if(keys.size() != values.size()) throw new ... // pick your poison there
    Map<K,V> map = new HashMap<K,V>();
    Iterator<K> keyIter = keys.iterator();
    Iterator<V> valIter = values.iterator();
    while(keyIter.hasNext()) {
        K key = keyIter.next();
        V val = valIter.next();
        map.put(key,val);
    }
    return map;
}
...