petites questions sur java

Le
Nicolas Moreau
bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


merci d'avance

Nicolas Moreau
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Kupee
Le #221559
bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?



Avec l'introspection oui mais c'est lent. Ca ressemble un peu a du php
comme style de programmation que tu cherches a faire ...

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


Ben créer un autre Vector, parcourir me premier et faire
nouveauVecteur.addAll(autrevecteur) pour chaque vecteur de ta liste

Raphael Tagliani
Le #221558
Le langage Scala contient tout ce que tu veux, c'est une surcouche à
Java, qui n'empèche en rien d'utiliser java.

En passant, utilise plutôt des ArrayList que des Vector, à moins que
plusieurs threads accèdent à ta structure de données en même temps.

bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?



Avec l'introspection oui mais c'est lent. Ca ressemble un peu a du php
comme style de programmation que tu cherches a faire ...

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


Ben créer un autre Vector, parcourir me premier et faire
nouveauVecteur.addAll(autrevecteur) pour chaque vecteur de ta liste



alexandre cartapanis
Le #221557
Le langage Scala contient tout ce que tu veux, c'est une surcouche à
Java, qui n'empèche en rien d'utiliser java.

En passant, utilise plutôt des ArrayList que des Vector, à moins qu e
plusieurs threads accèdent à ta structure de données en même te mps.


encore plus dans ce cas!!
Utilisez un java.util.Collections.synchronizedList() plutôt...


bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque
object d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?



Avec l'introspection oui mais c'est lent. Ca ressemble un peu a du php
comme style de programmation que tu cherches a faire ...

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne cré er
qu'un seul vecteur contenant tous les éléments) ?


Ben créer un autre Vector, parcourir me premier et faire
nouveauVecteur.addAll(autrevecteur) pour chaque vecteur de ta liste




--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email



Laurent Bossavit
Le #221556
- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


Ah, pour tout ça il faut utiliser la bonne version de Java, celle qui
s'appelle... Ruby. ;)

Bon, JRuby en l'occurrence: http://jruby.codehaus.org/ , à qui Sun vient
d'accorder un soutien significatif.

Par exemple, appliquer une méthode sur chaque objet d'une liste:

maListe = ['bananes', 'pommes', 'crèpes']
maListeFlambee = maListe.map {|ingredient| flamber(ingredient)}

def flamber ingredient
ingredient + ' flambees'
end

On peut aussi passer une méthode en paramètre; il suffit de la
"réifier" comme suit:

def sauter ingredient
ingredient + ' sautees'
end

flambage = proc {|ingredient| flamber(ingredient)}
sautage = proc {|ingredient| sauter(ingredient)}

maListeFlambee = maListe.map (&flambage)
maListeSautee = maListe.map (&sautage)

Enfin, pour aplatir un vecteur en Ruby, il suffit d'appeler la méthode
Array.flatten fournie en standard.

C'est fou tout ce qu'on peut faire en Java. :)

Laurent

TestMan
Le #221555
- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


Ah, pour tout ça il faut utiliser la bonne version de Java, celle qui
s'appelle... Ruby. ;)

Bon, JRuby en l'occurrence: http://jruby.codehaus.org/ , à qui Sun vient
d'accorder un soutien significatif.

Par exemple, appliquer une méthode sur chaque objet d'une liste:

maListe = ['bananes', 'pommes', 'crèpes']
maListeFlambee = maListe.map {|ingredient| flamber(ingredient)}

def flamber ingredient
ingredient + ' flambees'
end

On peut aussi passer une méthode en paramètre; il suffit de la
"réifier" comme suit:

def sauter ingredient
ingredient + ' sautees'
end

flambage = proc {|ingredient| flamber(ingredient)}
sautage = proc {|ingredient| sauter(ingredient)}

maListeFlambee = maListe.map (&flambage)
maListeSautee = maListe.map (&sautage)

Enfin, pour aplatir un vecteur en Ruby, il suffit d'appeler la méthode
Array.flatten fournie en standard.

C'est fou tout ce qu'on peut faire en Java. :)

Laurent


Perso, j'ai bcp de mal avec la synthaxe de ruby ... Ruby l'ObjectiveC de
l'an 2000 ? :P

Encore un langage qui à raison trop tôt ... et une synthaxe "qui refait
le monde" ;-)


fabrice-pas-despame.bacchella
Le #221514
On Thu, 14 Sep 2006 16:10:43 +0200, Kupee
- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?



Via une interface qui définit la méthode. Tu passe un objet qui
implémente l'interface, d'une façon ou d'une autre.


Sylvain
Le #221513
Nicolas Moreau wrote on 14/09/2006 16:04:

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:


vraiment des raccourcis ou des basiques de POO ??

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?


la formulation s'entends une solution qui n'est pas la bonne.

la solution en POO, donc en Java, consiste à exploiter un comportement
polymorphe des éléments de la liste - c'est à dire le fait que les
éléments de cette liste présente une 'interface' identique.

'interface' désigne ici le fait que tous les éléments ont un parent
commun définissant la méthode virtuelle qui sera invoquée pour tous les
éléments de la liste, ou sera une interface (au sens du langage)
implémentée par ces éléments.

concrètement, définissions:

// l'interface définissant *la* méthode

public interface ListItemBehavior {
public abstract void doIt();
}

// les items 1,2,N implémentant la méthode

class Item1 implements ListItemBehavior {
public Item1(){
}
public void doIt(){
System.out.println("Item 1");
}
}

// la liste contenant des items à itérer:
Vector<ListItemBehavior> vector new Vector<ListItemBehavior>(10, 10);

// puis l'appel de la méthode sur tous les éléments
for (int i = 0; i < vector.size(); ++i)
vector.elementAt(i).doIt();

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?


au sens C (un paramètre de type pointeur de fonction) c'est impossible.

par contre on peut passer un identifiant (numérique, ...) basique qui
selon un switch réalise le bon appel, ici aussi on se basant sur des
propriétés d'interface commune (le polymorphisme).

une autre façon d'aborder le problème, et à privilégier, si la méthode
paramètre est plus ou moins conditionné par l'instance sur laquelle on
l'applique est de définir ce comportement comme un caractère virtuel; on
ne passera alors aucun paramètre à la méthode considéré car elle
invoquera (bille en tête) la méthode doIt (foo, toto, ...) de ou des
objects paramètres.

une troisième façon de résoudre le problème est de ne pas chercher à
transmettre la méthode à appliquer (ce qui est imossible) mais
directement d'invoquer la méthode (virtuelle) de l'instance considérée.

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?


avec la définition ci-avant, et le vecteur 2D suivant:

Vector< Vector<ListItemBehavior> > vector2D new Vector< Vector<ListItemBehavior> >(10, 10);

on créé le vector 1D

Vector<ListItemBehavior> dest new Vector<ListItemBehavior>(10, 10);

et on vide le premier dans le second par:

for (int i = 0; i < vector2D.size(); ++i)
dest.addAll(vector2D.elementAt(i));

Sylvain.

TestMan
Le #221512
Bonsoir,

bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?


final List<Truc> trucs = ....
for(Truc truc : trucs){
trucs.uneMethode(a,b);
}

Truc étant une interface ou une classe commune à tous les objects de la
liste.

- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?


Comme déjà répondu par kupee... l'introspection fait ça bien :

Method methodeCible =
Truc.class.getMethod("uneMethode",String.class,String.class);

trucAFaire(methodeCible);

Attention si votre but est de faire un traitement variable en fonction
du type d'objet, le plus simple reste que vos objets implémentent une
interface commune avec une méthode implémentée selon les besoins de
chaque classes différentes. Au final vous pourrez traiter tout ce petit
monde d'une façon unique comme dans le premier cas par exemple, alors
qu'en fait les traitements effectués seront adaptés au cas de chacun.

C'est beaucoup plus puissant que les passages de méthodes car on définit
là une sorte de "contrat" qui est extensible ...

- est-ce qu'on peut mettre a plat un vecteur de vecteurs (= ne créer
qu'un seul vecteur contenant tous les éléments) ?



final List<List<String>> superConteneur = Arrays.asList(
Arrays.asList("un","deux"),
Arrays.asList("test","toto","bidule"),
Arrays.asList("text","yop")
);

final List<String> nouveauConteneur = new ArrayList<String>();
for(List<String> liste : superConteneur){
nouveauConteneur.addAll(liste);
}

Bon code ...

A+
TM

Nicolas Moreau
Le #221506

[...]

Merci pour toutes les réponses, c'est un peu ce à quoi je m'attendais.
J'ai pris gout a certaines facilités de python qui me démangent quand je
code en Java


--
Nicolas Moreau
Alain
Le #221453
bonjour,

j'ai quelques questions pour java, en fait c'est surtout pour des
raccourcis de programmation:

- existe t'il une methode pour appliquer une méthode sur chaque object
d'une liste ?
je crois pas, mais il y a une design pattern pour ca (visitor).



conrètement, si tu veux appliquer une méthode à plein d'objet c'est
qu'ils l'implémentent tous (sinon introspection/reflection!)... alors
(si tu les maitrise) déclare qu'il implémentent tous une interface avec
cette méthode...

ensuite crée une méthode qui prend en paramètre un Iterator
parcours l'Iterator et pour chaque élément, fait un cast sur l'interface
(tu peux même tester avec instanceof si l'objet implémente l'interface)
et lance ta ou tes méthodes...




- est-ce qu'on peut passer une methode en paramètre d'une méthode
(d'après mes recherches c'est pas possible) ?
oui avec reflection, mais c'est pas parcément nécessaire...


peut être que toutes tes méthodes se ressemblent...
tu peyx utiliser la design pattern "command".

tu crée des objets qui implémentent un interface de "commande"...
ils représenter "une chose a faire sur un truc d'un type donné"...
Ils peuvent avoir des données, et sont envoyés à des objets près à les
executer.
par exemple ca peut être une requête ou procédure base de donnée, envoyé
à une connexion de base, une action de l'utilisateur à envoyer à un
éditeur de texte...

ca permet de passer ses commande à des objets, mais aussi de les stoker
pour les rejouer, pour les défaire (si il y a une méthode "défaire" en
plus de "faire")...


cherche des sites sur les design pattern, et déjà celles du "gang of
four"... ya un super bouquin qui dit l'essentiel. si t'es un vieux
programmeur en fait tu doit toutes les connaître, même si tu ne les a
jamais lues...
les design pattern ca devrait faire partie de tous les cours
d'informatique, avant même les langages eux mêmes.


Publicité
Poster une réponse
Anonyme