Сообщений: 577
Тем: 41
Зарегистрирован: Nov 2012
Репутация:
1,886
Появилась необходимость сделать в Map 2 параметра Class.
ZoneAllCoords
Код: public static class ZoneAllCoords
{
public int zone;
public int number;
ZoneAllCoords(int zone, int number)
{
this.zone = zone;
this.number = number;
}
}
ZoneCoords
Код: public static class ZoneCoords
{
public int x;
public int y;
public int z;
ZoneCoords(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
Код: private final static Map<ZoneAllCoords, ZoneCoords> Zone_Coords = new ConcurrentHashMap<ZoneAllCoords, ZoneCoords>();
Заполнение идет так:
Код: Zone_Coords.put(new ZoneAllCoords(1,1), new ZoneCoords(x,y,z));
Zone_Coords.put(new ZoneAllCoords(1,2), new ZoneCoords(x,y,z));
Теперь мне надо через get взять эти параметры x,y,z.
Код: ZoneCoords zc = Zone_Coords.get(new ZoneAllCoords(1,1));
и соответственно
Код: System.out.println("##x = "+zc.x+"; y = "+zc.y+"; z = "+zc.z);
Не работает.
Возможно ли как-то достать эти параметры через класс?
Точнее - как достать эти параметры, что нужно передавать в get()?
P.S Подсказали как по другому можно сделать. Но всё равно интересует, возможно ли это сделать.
Сообщений: 1,240
Тем: 29
Зарегистрирован: May 2013
Репутация:
2,505
Код
Код: public static class ZoneCoords
{
private int _x;
private int _y;
private int _z;
ZoneCoords(int x, int y, int z)
{
_x = x;
_y = y;
_z = z;
}
public int getX()
{
return _x;
}
public int getY()
{
return _y;
}
public int getZ()
{
return _z;
}
}
Адресация: ZoneCoords.getX(), ZoneCoords.getY(), ZoneCoords.getZ()
Сообщений: 577
Тем: 41
Зарегистрирован: Nov 2012
Репутация:
1,886
Donatte Написал:
Код
Код: public static class ZoneCoords
{
private int _x;
private int _y;
private int _z;
ZoneCoords(int x, int y, int z)
{
_x = x;
_y = y;
_z = z;
}
public int getX()
{
return _x;
}
public int getY()
{
return _y;
}
public int getZ()
{
return _z;
}
}
С ZoneCoords всё в порядке.
Сообщений: 1,912
Тем: 56
Зарегистрирован: Jan 2009
Репутация:
12,921
06-29-2014, 06:43 PM
(Сообщение последний раз редактировалось: 06-29-2014, 06:44 PM VISTALL.)
Определите в ZoneAllCoords два метода
equals
hashCode
суть в том, для Мапы - ваши обьекты разные
Добавлено через 1 минуту
Вот пример того
http://stackoverflow.com/questions/27581...de-in-java
Сообщений: 1,052
Тем: 33
Зарегистрирован: Sep 2011
Репутация:
12,172
[SRC="java"]
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MapZone
{
private final static Map<Zone, ZoneCoords> cord_map = new ConcurrentHashMap<Zone, ZoneCoords>();
public static void main(String[] args)
{
create(new Zone(1, 1), new ZoneCoords(245, 727, 5424));
create(new Zone(1, 2), new ZoneCoords(340, 432, 1234));
Zone zone_1 = getZone(1, 1);
ZoneCoords cord_1 = cord_map.get(zone_1);
System.out.println("##x = " + cord_1.x + "; y = " + cord_1.y + "; z = " + cord_1.z);
Zone zone_2 = getZone(1, 2);
ZoneCoords cord_2 = cord_map.get(zone_2);
System.out.println("##x = " + cord_2.x + "; y = " + cord_2.y + "; z = " + cord_2.z);
}
private static Zone getZone(int id, int number)
{
for(Zone zone : cord_map.keySet())
{
if(zone.zone == id && zone.number == number)
return zone;
}
return null;
}
private static void create(Zone zone, ZoneCoords coords)
{
cord_map.put(zone, coords);
}
static class Zone
{
public int zone;
public int number;
Zone(int zone, int number)
{
this.zone = zone;
this.number = number;
}
}
static class ZoneCoords
{
public int x;
public int y;
public int z;
ZoneCoords(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
}
[/SRC]
Можно и так
Сообщений: 555
Тем: 2
Зарегистрирован: Feb 2011
Репутация:
1,507
ребята, вы упороты :redlol:
создавать новый класс ради значения в таблице
ладно бы там был ключ нечто вроде String.format("%d-%d", x, y), но такоеее
рекомендую вот это guava's HashBasedTable
зы. Donatte - вам вообще не стоит заниматься помощью
Сообщений: 1,240
Тем: 29
Зарегистрирован: May 2013
Репутация:
2,505
KID Написал:ребята, вы упороты :redlol:
создавать новый класс ради значения в таблице
ладно бы там был ключ нечто вроде String.format("%d-%d", x, y), но такоеее
рекомендую вот это guava's HashBasedTable
зы. Donatte - вам вообще не стоит заниматься помощью
А кто сказал, что я помогаю?
Сообщений: 555
Тем: 2
Зарегистрирован: Feb 2011
Репутация:
1,507
Donatte Написал:А кто сказал, что я помогаю? не знаю кто сказал, ваш текст совершенно ниочем - вас бы наказать по правилам форума
Сообщений: 1,240
Тем: 29
Зарегистрирован: May 2013
Репутация:
2,505
KID Написал:не знаю кто сказал, ваш текст совершенно ниочем - вас бы наказать по правилам форума
Я не виноват, что человек изобретает семиколёсный велосипед. Придумывать мапы с двумя объектами один из которых как индефикатор, в случаях когда это не требуется, я вас умоляю.
А вы ему ещё, "нака друг подстегни к своему говнокоду гугловскую либу". И потом у анонимусов глаза на лоб лезут от количества подстёгнутых левых библиотек к 2 классам с 10-ю методами.
Оптимальным для него было бы создать класс ZoneCoords с (number, x, y, z) и использовать Map<Integer, List<ZoneCoords>>.
Но как говориться, каждый дрочит как он хочет.
Удачи!
Сообщений: 1,052
Тем: 33
Зарегистрирован: Sep 2011
Репутация:
12,172
Donatte, думаю кид имел в виду то, что Вы отписали совет ввести инкапсуляцию, но суть проблемы была не в этом.
|