Карты не работают некоторые клавиши
Я внедряю TreeMap
в java сегодня, чтобы отслеживать навигацию для следующей страницы.
У меня есть 5 записей в карте деревьев, 3 из них работают, а 2 не работают.
NavigationHelper.java:
public class NavigationHelper {
private static String hhSection = HXConstants.CSR_SECTION_FAMILY_DETAILS;
private static String[] hhPages = {
HXConstants.CSR_PAGE_ID_HOUSEHOLD_MEMBERS,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_RELATIONSHIP,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_ADDITIONAL_QUESTIONS,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_SUMMARY_NEW,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_PRIVACY_AGREEMENT
};
private static String hhPath = "household";
public static HashMap<String, NavLocation> getHHNavMap()
{
HashMap<String, NavLocation> hhNavMap = new HashMap<String, NavLocation>();
for (int i=0;i<hhPages.length;i++ ) {
hhNavMap.put(hhPath+"/"+hhPages[i], new NavLocation(hhSection,hhPages[i]));
}
return hhNavMap;
}
public static Map<NavLocation,String> getHHBackNavMap() {
TreeMap<NavLocation,String> hhBackNavMap = new TreeMap<NavLocation, String>();
HashMap<String, NavLocation> hhNavMap = getHHNavMap();
for(Entry<String, NavLocation> entry : hhNavMap.entrySet()) {
hhBackNavMap.put(entry.getValue(), entry.getKey());
}
return hhBackNavMap;
}
public static class NavLocation implements Comparable<NavLocation>{
private String section;
public NavLocation(String s, String p) {
this.section = s;
this.page = p;
}
public String getSection() {
return section;
}
public String getPage() {
return page;
}
private String page;
@Override
public int compareTo(NavLocation navObj) {
if(navObj.getPage().equals(this.page) && (navObj.getSection().equals(this.section)))
return 0;
return 1;
}
}
}
AppAggNavigationHelper.java:
public class AppAggNavigationHelper extends RestServiceBaseTest {
private static String hhSection = HXConstants.CSR_SECTION_FAMILY_DETAILS;
private static String[] hhPages = {
HXConstants.CSR_PAGE_ID_HOUSEHOLD_MEMBERS,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_RELATIONSHIP,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_ADDITIONAL_QUESTIONS,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_SUMMARY_NEW,
HXConstants.CSR_PAGE_ID_HOUSEHOLD_PRIVACY_AGREEMENT
};
NavigationHelper navigationHelper = new NavigationHelper();
List<NavLocation> navList = new ArrayList<NavLocation>();
@Before
public void populateNavLocations() {
for(int i = 0 ; i < hhPages.length ; i++) {
navList.add(new NavLocation(hhSection, hhPages[i]));
}
}
@Test
public void test() {
testWithoutRest();
}
public void testWithoutRest() {
TreeMap<NavLocation,String> map = (TreeMap<NavLocation, String>) navigationHelper.getHHBackNavMap();
for(Map.Entry<NavLocation, String> entry : map.entrySet()) {
NavLocation nav = entry.getKey();
System.out.println(nav.getPage() + " " + nav.getSection());
System.out.println(entry.getValue());
}
p("*****");
for(NavLocation navLocation : navList) {
System.out.println(navLocation.getPage() + " " + navLocation.getSection() + " " + map.get(navLocation));
}
}
}
Тогда выход подключен, для члена, резюме, конфиденциальности он работает. Но для отношений и вопросов это не так. :
member familydetails household/member
relation familydetails null
question familydetails null
summary familydetails household/summary
privacy familydetails household/privacy
Почему отношение и вопрос не работают?
1 ответ:
Ваш метод
Вместо этого классический способ реализации такого метода в зависимости от свойств объектов, вероятно, будет выглядеть примерно так:compareTo
сломан. Если два объектаNavLocation
,a
иb
отличаются по своей странице или разделу, то оба объектаa.compareTo(b)
иb.compareTo(a)
вернут1
, нарушив тем самым общий контракт метода, что может привести к неожиданным результатам.@Override public int compareTo(NavLocation other) { int result = getPage().compareTo(other.getPage()); if (result != 0) { return result; } return getSection().compareTo(other.getSection()); }