[RESOLVIDO] Dúvida sobre como mudar assinatura de metodo

Olá a todos do GUJ.
Pessoal, tenho o seguinte metodo abaixo que é do tipo void, como vocês podem ver.
Eu gostaria de mudar assinatura dele pra alguma outra que pudesse me dar um return

private void buildObjectPropertyOnto(OWLOntology ontology) { for (OWLObjectProperty objectProperty : ontology.getObjectPropertiesInSignature()) { //System.out.print(pm.getShortForm(objectProperty).replace(":", "") + " "); for (Iterator<OWLClassExpression> itDomains = objectProperty.getDomains(ontology).iterator(); itDomains.hasNext();) { OWLEntity oceDomains = (OWLEntity) itDomains.next(); //System.out.print(pm.getShortForm(oceDomains).replace(":", "") + " "); for (Iterator<OWLClassExpression> itRanges = objectProperty.getRanges(ontology).iterator(); itRanges.hasNext();) { OWLEntity oceRanges = (OWLEntity) itRanges.next(); //objProperty. System.out.println(pm.getShortForm(oceDomains).replace(":", "") + " - " + pm.getShortForm(objectProperty).replace(":", "") + " - " + pm.getShortForm(oceRanges).replace(":", "")); } } } }
Quando chamo-o em minha classe principal b[/b] é retornado os seguintes valores abaixo.

Disease - possibleDrug - Drug Drug - genericDrug - GenericDrug Drug - sideEffect - SideEffect Drug - activeIngredient - Ingredient
Tentei mudar à assinatura para um Map<K,V> deixando-o da seguinte maneira abaixo.

[code]private Map<Map<String, String>, String> buildObjectPropertyOnto(OWLOntology ontology) {
Map<String, String> objPropertyAux = new HashMap<>();
Map<Map<String, String>, String> objProperty = new HashMap<>();

for (OWLObjectProperty objectProperty : ontology.getObjectPropertiesInSignature()) {
    //System.out.print(pm.getShortForm(objectProperty).replace(":", "") + " ");
    for (Iterator<OWLClassExpression> itDomains = objectProperty.getDomains(ontology).iterator(); itDomains.hasNext();) {
	OWLEntity oceDomains = (OWLEntity) itDomains.next();
            objPropertyAux.put(pm.getShortForm(oceDomains).replace(":", ""), pm.getShortForm(objectProperty).replace(":", "")); //Adiciono os valores no meu primeiro Map
	for (Iterator<OWLClassExpression> itRanges = objectProperty.getRanges(ontology).iterator(); itRanges.hasNext();) {
	    OWLEntity oceRanges = (OWLEntity) itRanges.next();
	    objProperty.put(objPropertyAux, pm.getShortForm(oceRanges).replace(":", ""));
	}
    }
}
return objProperty;

}[/code]
No entanto, o resultado retornado não foi o esperado. Pelo contrário, longe disso.
O resultado retornado foi o seguinte abaixo.

key: {Disease=possibleDrug, Drug=activeIngredient} Value: SideEffect key: {Disease=possibleDrug, Drug=activeIngredient} Value: Ingredient key: {Disease=possibleDrug, Drug=activeIngredient} Value: GenericDrug key: {Disease=possibleDrug, Drug=activeIngredient} Value: Drug
O resultado que eu deseja era o mesmo retornado quando a assinatura do meu metodo era do tipo void.

Alguém poderia me dar um dica sobre o que fazer para que meu resultado seja parecido com o que é retornando quando a assinatura do meu metodo é do tipo void?
Desde de já obrigado pela ajuda de todos.
Abraço.

Não olhei direito, uma pergunta primeiro.

private Map<Map<String, String>, String> buildObjectPropertyOnto(OWLOntology ontology) {  
    Map<String, String> objPropertyAux = new HashMap<>();  
    Map<Map<String, String>, String> objProperty = new HashMap<>();  

é isso mesmo que você quer? que o valor seja uma string e a chave seja um outro HashMap?
não seria ao contrário?

Map<String,Map<String,String> objProperty

Pensei em fazer assim, mas como pode ser visto a partir do resultado abaixo a minha chave iria se repetir o que acabaria sobrescrevendo os outros resultados.

Disease - possibleDrug - Drug Drug - genericDrug - GenericDrug Drug - sideEffect - SideEffect Drug - activeIngredient - Ingredient
A minha ideia é salvar a tripla (três resultados) na seguinte ordem apresentada acima.
Pensei que com Map fosse possível, mas acho que não seja.

Alguma ideia de como eu possa fazer isso?
Tem alguma estrutura em java que me permita armazenar resultados nesse formato de tripla apresentado acima?

cria uma classe com os três atributos
ai você cria um arrayList dessa classe e imprime na ordem que você quiser

Fiz da seguinte maneira.

  1. Criei uma classe para receber os três parametros.

private ArrayList arrayTriple(String domian, String objectProperty, String range){ list = new ArrayList(); list.add(domian); list.add(objectProperty); list.add(range); return list; }
E o chamei dentro do meu método buildObjectPropertyOnto() ficando da seguinte maneira abaixo.

private ArrayList buildObjectPropertyOnto(OWLOntology ontology) { ArrayList arrayList = new ArrayList(); for (OWLObjectProperty objectProperty : ontology.getObjectPropertiesInSignature()) { for (Iterator<OWLClassExpression> itDomains = objectProperty.getDomains(ontology).iterator(); itDomains.hasNext();) { OWLEntity oceDomains = (OWLEntity) itDomains.next(); for (Iterator<OWLClassExpression> itRanges = objectProperty.getRanges(ontology).iterator(); itRanges.hasNext();) { OWLEntity oceRanges = (OWLEntity) itRanges.next(); arrayList.addAll(arrayTriple(pm.getShortForm(oceDomains).replace(":", ""), pm.getShortForm(objectProperty).replace(":", ""), pm.getShortForm(oceRanges).replace(":", ""))); } } } return arrayList; }

No entanto, quando mandei imprimir esse meu array invés de retornar os resultados no formato de tripla ele retornou os resultados de maneira individual.

Era assim que você havia pedido pra eu fazer?

não bem isso

tipo assim

cria uma classe nova com 3 atributos

        private String objProperty;
	private String domain;
	private String range;
	//Getters and Setters
	public String getObjProperty() {
		return objProperty;
	}

	public void setObjProperty(String objProperty) {
		this.objProperty = objProperty;
	}

	public String getDomain() {
		return domain;
	}

	public void setDomain(String domain) {
		this.domain = domain;
	}

	public String getRange() {
		return range;
	}

	public void setRange(String range) {
		this.range = range;
	}

 

essa é a classe nova
ai lá naquele método

private ArrayList buildObjectPropertyOnto(OWLOntology ontology) { ArrayList<nomeClasse> arrayList = new ArrayList<nomeClasse>(); //pode deixar o arraylist aqui mas tem que ser do tipo da sua classe <nomeClasse> nomeClasse obj = new nomeClasse(); //aqui você cria um objeto da classe que você criou (substitui nomeClasse pelo nome dela); for (OWLObjectProperty objectProperty : ontology.getObjectPropertiesInSignature()) { for (Iterator<OWLClassExpression> itDomains = objectProperty.getDomains(ontology).iterator(); itDomains.hasNext();) { OWLEntity oceDomains = (OWLEntity) itDomains.next(); for (Iterator<OWLClassExpression> itRanges = objectProperty.getRanges(ontology).iterator(); itRanges.hasNext();) { OWLEntity oceRanges = (OWLEntity) itRanges.next(); obj.setDomain(pm.getShortForm(oceDomains).replace(":", "")); //pega a string e coloca dentro do atributo domain do obj obj.setObjProperty(pm.getShortForm(objectProperty).replace(":", ""));//pega a string e coloca dentro do atributo objProperty do obj obj.setRange(pm.getShortForm(oceRanges).replace(":", "")))); //pega a string e coloca dentro do atributo range do obj //Agora você tem um objeto com os atributos basta colocalo no arraylist arrayList.add(obj); } } } return arrayList; }

la na main você vai receber o arraylist
ai pra imprimir você usa um foreach

for (nomeClasse obj : arrayList){ //Aqui ele vai percorrer o array list e em cada linha ele vai pegar o objeto que ta la dentro e inserir em obj //aqui dentro você imprime utilizando os get System.out.println(obj.getRange+obj.getDomain+obj.getObjProperty); //aqui você pode concatenar ou colocar na ordem que você quer }

Sei la, não parece a fórmula mais simples mas é a mais orientada a objeto vou ver se penso em algo mais simples

faltou o parenteses nos get

for (nomeClasse obj : arrayList){ //Aqui ele vai percorrer o array list e em cada linha ele vai pegar o objeto que ta la dentro e inserir em obj //aqui dentro você imprime utilizando os get System.out.println(obj.getRange()+obj.getDomain()+obj.getObjProperty()); //aqui você pode concatenar ou colocar na ordem que você quer }

Mais simples você pode criar um vetor de string com 3 posições e guardar num arraylist
ai você guarda cada campo em uma posição e guarda o vetor na lista
ai cada item da lista vai ter um vetor com as 3 string
mas não sei se funciona preciso testar primeiro;

Olá craj, fiz da maneira como você disse.

  1. Criei uma classe com as três variaveis

[code]public class TripleStore {
private String domain;
private String objectProperty;
private String range;

public TripleStore(String domain, String objectProperty, String range){
    this.domain = domain;
    this.objectProperty = objectProperty;
    this.range = range;
}

public String getDomain() {
    return domain;
}

public void setDomain(String domain) {
    this.domain = domain;
}

public String getObjectProperty() {
    return objectProperty;
}

public void setObjectProperty(String objectProperty) {
    this.objectProperty = objectProperty;
}

public String getRange() {
    return range;
}

public void setRange(String range) {
    this.range = range;
}

}[/code]

  1. Para adicionar fiz da seguinte maneira como você indicou

[code]private ArrayList buildObjectPropertyOnto(OWLOntology ontology) {
ArrayList arrayList = new ArrayList();
TripleStore tripleStore;
for (OWLObjectProperty objectProperty : ontology.getObjectPropertiesInSignature()) {
for (Iterator itDomains = objectProperty.getDomains(ontology).iterator(); itDomains.hasNext():wink: {
OWLEntity oceDomains = (OWLEntity) itDomains.next();
for (Iterator itRanges = objectProperty.getRanges(ontology).iterator(); itRanges.hasNext():wink: {
OWLEntity oceRanges = (OWLEntity) itRanges.next();

                tripleStore = new TripleStore(pm.getShortForm(oceDomains).replace(":", ""), 
                        pm.getShortForm(objectProperty).replace(":", ""), 
                        pm.getShortForm(oceRanges).replace(":", ""));
                
                tripleStore.setDomain(pm.getShortForm(oceDomains).replace(":", ""));
                tripleStore.setObjectProperty(pm.getShortForm(objectProperty).replace(":", ""));
                tripleStore.setRange(pm.getShortForm(oceRanges).replace(":", ""));
                arrayList.add(tripleStore);
                
            }
        }
    }
    return arrayList;

}[/code]

No meu método para imprimir fiz da seguinte maneira:

[code]public void viewObjectPropertyOnto() throws OWLOntologyCreationException {
ontology = loadOntology();
pm = prefixManager();

    for (Iterator it = buildObjectPropertyOnto(ontology).iterator(); it.hasNext();){
        TripleStore ts = (TripleStore) it.next();
        System.out.println(ts.getDomain() + " " + ts.getObjectProperty() + " " + ts.getRange());
    }

}[/code]

Muito obrigado pelas dicas :smiley:
Abraço.