Permalänk

Java - hjälp med metod

Hej,

Jag håller på med ett program som hanterar noder på en grafisk karta och förbindelserna mellan dessa och använder sig av en generisk klass vid namn ListGraph<N>, denna ingår i ett paket som heter graphs, dessutom implementerar ListGraph interfacet Graph som bl a har en metod vid namn "Set<ListEdge<N>> getEdgesFrom(N node);" Denna metod tar en nod och returnerar en kopia av samlingen av alla bågar(förbindelser) som leder från denna nod. Bågar är en generisk klass vid namn ListEdge<N> som har information om bågens vikt(typ distansen mellan platser) och förbindelsens namn(färdmedlet). ListEdge är också en del av paketet graphs.

En del av koden för klassen är följande:

package graphs; import java.util.*; public class ListGraph<N> implements Graph<N>{ private HashMap<N,List<ListEdge<N> >> nodes = new HashMap<N,List<ListEdge<N> >>(); public void addNode(N ny){ nodes.put(ny, new ArrayList<ListEdge<N>>()); } public void connect(N from, N to, String n, int v){ List<ListEdge<N>> fromList = nodes.get(from); List<ListEdge<N>> toList = nodes.get(to); ListEdge<N> e1 = new ListEdge<N>(to, n, v); fromList.add(e1); ListEdge<N> e2 = new ListEdge<N>(from, n, v); toList.add(e2); } .............. public Set<ListEdge<N>> getEdgesFrom(N node){ return null; } public ListEdge<N> getEdge(N n1, N n2){ List<ListEdge<N>> bågarna = nodes.get(n1); for(ListEdge<N> e : bågarna) if (e.getDestination().equals(n2)) return e; return null; } ...............(några metoder saknas) public String toString(){ String ret = ""; for(Map.Entry<N,List<ListEdge<N>>> me : nodes.entrySet()) ret += me.getKey()+": "+me.getValue()+"\n"; return ret; } }

Det är alltså den markerade metoden jag inte får till, jag har testat att skriva t ex:

Set<ListEdge<N>> set = nodes.keySet(); for (ListEdge<N> le : set) return le.get(node);

Jag inser att det inte funkar eftersom jag måste returnera ett Set av ListEdge <N>, men hur jag än vrider och vänder på det blir det alltid fel, t ex att jag bara returnerar ett Set<N> istället för Set<ListEdge<N>>, som kompilatorn självklart kräver. Jagf får bl a detta fel:
found : java.util.Set<java.util.Map.Entry<N,java.util.Set<graphs.Edge<N>>>>
required: java.util.Set<graphs.Edge<N>>

All hjälp uppskattas enormt!
/P

Permalänk
Medlem

Om jag förstår det hela rätt, så kanske det här kan fungera:

public Set<ListEdge<N>> getEdgesFrom(N node){ return new HashSet<ListEdge<N>>(nodes.get(node)); }

Om nodes nu är en map som kopplar en nod (nyckel) till en lista av alla bågar som leder ut från noden (värde), så borde det ju bara vara att ta denna lista och konvertera till ett Set. HashSet har en konstruktor som tar en godtycklig Collection och skapar ett Set från den.

Permalänk

Jag ska testa hur det funkar alldeles strax, men det var nåt sånt jag var ute efter! Problemet var väl bara att jag kollade efter metoder i HashMap och inte HashSet...

tack