Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] Map/TreeMap

  1. #1

    [Java] Map/TreeMap

    Perchè la map che ho creato così

    final Map<Double, Team> ranking = new TreeMap<Double, Team>(
    new Comparator<Double>() {

    @Override
    public int compare(Double o1, Double o2) {
    System.out.println(o1.doubleValue() + " "
    + o2.doubleValue());
    if (o1.doubleValue() > o2.doubleValue())
    return 1;
    if (o1.doubleValue() < o2.doubleValue())
    return -1;
    return 0;
    }
    });

    non mi ordina gli elementi x key?
    li aggiungo con

    ranking.put(new Double(pointsSum), team);
    dove team è un oggetto della classe Team composta da alcuni campi...di cui non ho interesse nell'ordinamento?
    Aiutatemi per favoreeeee! Grazie ciaooo!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Map/TreeMap

    Originariamente inviato da jed84
    Perchè la map che ho creato così

    final Map<Double, Team> ranking = new TreeMap<Double, Team>(
    new Comparator<Double>() {

    @Override
    public int compare(Double o1, Double o2) {
    System.out.println(o1.doubleValue() + " "
    + o2.doubleValue());
    if (o1.doubleValue() > o2.doubleValue())
    return 1;
    if (o1.doubleValue() < o2.doubleValue())
    return -1;
    return 0;
    }
    });

    non mi ordina gli elementi x key?
    Tecnicamente mi sembra tutto giusto (il problema sarà altrove, forse).

    Comunque faccio presente 2 cose:

    1) Double implementa Comparable<Double> quindi ha il metodo compareTo(). Se proprio volevi fare un Comparator, invece di fare la sequenza di test if (o1.doubleValue() > blabla, sarebbe bastato fare:

    return o1.compareTo (o2); // tutto qua

    2) Un TreeMap si può basare o sul "natural ordering" delle chiavi (Comparable) o su un apposito Comparator. Bene, il tuo Comparator è del tutto inutile. Double implementa, come ho appena detto, Comparable<Double>, le chiavi sarebbero già ordinate correttamente anche senza quel Comparator che fa la stessa cosa!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: [Java] Map/TreeMap

    Originariamente inviato da andbin

    2) Un TreeMap si può basare o sul "natural ordering" delle chiavi (Comparable) o su un apposito Comparator. Bene, il tuo Comparator è del tutto inutile. Double implementa, come ho appena detto, Comparable<Double>, le chiavi sarebbero già ordinate correttamente anche senza quel Comparator che fa la stessa cosa!!
    Si infatti..solo che visto che non mi ordinava ho provato a implementarlo io.. questo è il resto del codice.. io non ravviso problemi infatti l'iserimento è corretto...solo non ordinato!Se ti puo essere utile iserisco anche la clase Team.. intanto qui noti qlk problema?

    for (Iterator<Team> i = teamsList.iterator(); i.hasNext() {
    final Team team = i.next();
    double pointsSum = 0;
    for (Iterator<Double> i2 = team.getPoints().iterator(); i2
    .hasNext() {
    pointsSum += i2.next().doubleValue();
    }
    ranking.put(new Double(pointsSum), team);
    }

    GRAZIE PER L'AIUTOOOOOOO!

  4. #4
    ok niente...sono un idiota..sbagliavo a stampare il map..ordina perfettamente! Grazie mille ugualmente!! Ora sarei interessato a sapere la risposta dell'altra mia domanda..non è che sai darmela tu?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: [Java] Map/TreeMap

    Originariamente inviato da jed84
    codice:
    	for (Iterator<Team> i = teamsList.iterator(); i.hasNext();) {
    			final Team team = i.next();
    			double pointsSum = 0;
    			for (Iterator<Double> i2 = team.getPoints().iterator(); i2
    					.hasNext();) {
    				pointsSum += i2.next().doubleValue();
    			}
    			ranking.put(new Double(pointsSum), team);
    		}
    Questo immagino serva per popolare il TreeMap, cosa centra con l'ordinamento?
    L'ordinamento nel TreeMap è sulle chiavi e lo "vedi" appunto solo quando fai una iterazione sulle chiavi:

    codice:
    for (Double d : ranking.keySet())
        System.out.println (d);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    final Map<Team, Double> ranking = new TreeMap<Team, Double>(
    new Comparator<Team>() {

    @Override
    public int compare(final Team arg0, final Team arg1) {
    if (arg0.getTeamName().equals(arg1.getTeamName()))
    return 0;
    double sum1 = 0, sum2 = 0;
    for (Double d : arg0.getPoints()) {
    sum1 += d.doubleValue();
    }
    for (Double d : arg1.getPoints()) {
    sum2 += d.doubleValue();
    }
    // TODO decide who is first in case of equals!
    if (sum1 > sum2 || sum1 == sum2)
    return -1;
    return 1;
    }

    })
    il mio più grosso problema è diventato questo..non mi funge la comparazione...x quale motivo??
    quando inserisco una sfilza di "0" sul map con il comando:
    for (final Team t : championship.getTeamsList()) {
    Integer i = new Integer(0);
    ranking.put(t, i);
    }
    il risultato è:
    1°) 2X Pork = 0
    2°) Undici De Pascale = 0
    3°) Aquile Rosanero = null
    4°) Opigghialo = 0
    5°) Lattughese = 0
    6°) Scarbori Azzurri = 0
    7°) Superpippo '84 = 0
    8°) SarSimon = 0
    ovvero un elemanto è null e tutti gli altri sono 0 come dovrebbero!
    Cosa sbaglio??Se sn stato poco chiaro fatemi sapere ke vi spiego meglio! Grazieee!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.