Bonjour,

Voila je pêche un peu j'ai trouvé trouvé une solution mais elle me plais pas...

Je me demandais si j'avais pas d'autre possibilités pour la réaliser.

Donc mon problème est que je dois insérer un objet parmis des existants sans renuméroté les autres.

Donc j'ai une table adresse qui contient un numéro pour le tri qui est incrementiel pour toutes la Table plus un numéro de référence (0 à 99).
Biensur ces adresse sont liés a de multiple "cas".

Par ex:
table adresse (pour un "cas"):
Ref lieux TriNr
1 Paris 1234556
1 Metz 1234899
3 Lyon 1244556
7 Marseille 2345566
23 Toulon 3456566
etc...

J'aimerais insérer un ref 4 et que je trouve un numéro de tri entre 1244556 et 2345566.
si je choisis une ref qui est existante il faut ajouter 1 au numéro du tri. (Ref 3 =>1244557)

Ca n'a pas vraiment d'importance si le numéro de tri n'est pas unique dans la table.

Mon code actuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
private long searchReihenfolge(int refMax) {
		int refNr = Integer.parseInt(adresse.getEintragung().getReference());
		long reheinfolge;
		//zuerst die gleiche reference
		reheinfolge = searchAdressRef(refNr, 1);
		//Dann -1 reference
		if (reheinfolge == lgZero && refNr != 0) {
			reheinfolge = searchReihenfolgeDesc(refNr - 1, 1);
		}
		//Endlich +x reference
		if (reheinfolge == lgZero) {
			reheinfolge = searchReihenfolgeAsc(refNr + 1, -1, refMax);
		}
 
		if (reheinfolge == lgZero) {
			return adresse.getReihenfolge();
		}
 
		return reheinfolge;
	}
 
	private Long searchReihenfolgeAsc(int refNr, int toAdd, int refMax){
		long foundReihenfolge = lgZero;
		for(int i=(int)refNr;i <=refMax;i++) {
			Long res = searchAdressRef(refNr, toAdd);
			if(res !=lgZero) {
				foundReihenfolge = res;
				break;
			}
		}
		return foundReihenfolge;
	}
 
	private Long searchReihenfolgeDesc(int refNr, int toAdd){
		long foundReihenfolge = lgZero;
		for(int i=(int)refNr;i >=0;i--) {
			Long res = searchAdressRef(refNr, toAdd);
			if(res !=lgZero) {
				foundReihenfolge = res;
				break;
			}
		}
		return foundReihenfolge;
	}
 
	private Long searchAdressRef(int refNr, int toAdd) {
		for (FVAdresse adr : adresseList) {
			if (refNr == Integer.parseInt(adr.getEintragung().getReference())) {
				return adr.getReihenfolge() + toAdd;
			}
		}
		return lgZero;
	}
Bon le code fonctionne, mais je me demande si j'aurais pas de meilleurs alternative.

Merci