Autor Thema: ArrayList in LS  (Gelesen 7979 mal)

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
ArrayList in LS
« am: 22.12.10 - 15:16:14 »
Hallo,

in Java u.ä. gibt es die ArrayList. In diesem Datentyp kann ich Objekte anfügen, wieder rauslöschen usw.

In Lotusscript hab ich irgendwie Probleme, mein derzeitiges Problem umzusetzen. Ich möchte Objekte in einem Array speichern und dieses auch wieder entfernen. Dazu wäre wie gesagt die ArrayList ganz gut, da sie Vorteile von Beiden vereint. In LS steh ich da auf dem Schlauch, da beide Strukturen mit Objekten von Haus aus etwas eingeschränkt sind (if Object1 = Object2).

Gibt's ne möglichkeit ein Add, IndexOf oder Remove nachzubilden.

VG, Michael

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ArrayList in LS
« Antwort #1 am: 23.12.10 - 09:29:24 »
Wie wäre es  mit Listen?

Dim meinContainer List As Variant

Da kannst Du alles reinpacken und auch wieder entfernen. Ansprechbar ist jedes Element über einen Namen.

z.B.

Set meinContainer ("MeineDatenbank") = db
Print meinContainer ("MeineDatenbank").Title
Erase meinContainer ("MeineDatenbank")
If IsElement (meinContainer ("MeineDatenbank")) Then
   ...
End If

meinContainer ("einfacherText") = "Das ist nur ein Text"
Print meinContainer ("einfacherText")

usw.

Natürlich kannst Du Listen auch genauer spezifizieren

Dim meineDatenbanken List As NotesDatabase
Dim meineDokumente List As NotesDocument
Dim meineTexte List As String

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: ArrayList in LS
« Antwort #2 am: 04.01.11 - 09:23:36 »
@Peter,

das ist grundsätzlich richtig - in Listen kann man alles mögliche packen, auch NotesObjekte. Es kam aber nach meiner Erfahrung vor, daß man damit einen Server in die Knie zwingen konnte, wenn die Instanzen eine gewisse Zahl überschritten - ich habe ca. 15.000 Instanzen im Kopf, die sich auf dem Server agent-übergreifend addieren können. Von daher muß man bei der Verwendung mit Objekten etwas vorsichtig sein. Keinerlei Probleme hat man mit Strings oder anderen Datentypen. Da sind die Listen irre schnell und haben ansonsten kein Limit wie Arrays...

Zwischendurch hatte ich mal eine Notiz, daß es in den neuen Versionen behoben wäre, validiert hatte ich es aber noch nicht - also habe ich es immer noch im Hinterkopf, wenn ich damit arbeite... ;)

Toni
Grüßle Toni :)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: ArrayList in LS
« Antwort #3 am: 04.01.11 - 10:05:38 »
Notes Listen entsprechen den Datentypen von java.util. Map.
ArrayList würd eher Redimensionierbare Arrays entsprechen.

Lotus Script:
// deklarieren von variablen array
dim myList as String()
Dim i as Integer

REM Sachen in Liste tun:

redim preserve myList(0)
myList(0) = "hallo"
redimPreserve myList(1)
myList(1) = "welt"



Rem Lesen aus Liste
for i = 0 to ubound(myList)
 msgbox "Element "+ i + " von myList:" + myList(i)
end for

JAVA 
// deklarieren von liste
List <String> myList = new ArrayList<String>();

// sachen tun in liste
myList.add("hallo");
myList.add("Welt");


// lesen aus liste:
int i = 0;
for (String aMember : myList) {
 logger.debug("Element " + i + " von myList:" + aMember);
  i++;
}
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: ArrayList in LS
« Antwort #4 am: 04.01.11 - 18:13:06 »
@ata ich kann bestätigen, dass ein Client ca. 8000 NotesDocument-Objekte und ein Server ca 10000 in einem Array/Liste verwalten kann, dann gehen die Document-Handles aus.

Andere Objekte (Instanzen eigener Klassen) kann man um einiges mehr anlegen, wir haben eine ArrayList wie du sie von Java kennst in unser Framework implementiert:
http://www.foconis-object-framework.de/lsdoc/HFIK-6UAJZ7_%2885A7E3333558450B2BB29A5ADE3A3D37%29.html

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ArrayList in LS
« Antwort #5 am: 05.01.11 - 07:28:53 »
@ata

da hast Du natürlich recht, m.W. sind Listen grundsätzlich nur durch den verfügbaren Arbeitsspeicher begrenzt. Wenn ich Dokumente in eine Liste aufnehme, verbrauchen die natürlich viel mehr Speicher, als wenn nur ein String aufgenommen wird. Bei einem gerade ausgeführten Test unter 8.5.1 über Citrix rauchte der Client bei Aufnahme des Dokumentes 23.662 in eine Liste ab. Der gleiche Test in der gleichen DB unter 7.03 lokal liest gerade Dokument 27.500 (werde den Test aber abbrechen, dauert mir zu lange), habe lokal wohl mehr Ressourcen (Arbeitsspeicher). (Nachtrag: Ende war bei Dokument 28.245)

Etwas besonders verhalten sich neue Dokumente, da hatte ich mal ein Problem bei über 3.000 neuen ungespeicherten Dokumenten, die mochte Notes nicht.

Bei Massenverarbeitung von Dokumenten merke ich mir in der Liste nur die UniversalID und greife bei Bedarf über die ID auf das Dokument zu. Das ist zwar gefühlt geringfügig langsamer, packt dafür aber viel mehr Dokumente.

@Pitiyankee, @pram

in Euren Beispielen arbeitet Ihr mit Arrays, nicht mit Listen, die sind generell in der Größe eingeschränkt.
« Letzte Änderung: 05.01.11 - 07:31:38 von Peter Klett »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: ArrayList in LS
« Antwort #6 am: 05.01.11 - 09:40:45 »
@peter

das stimmt natürlich, in Arrays kann man max 65k Elemente packen, wobei Arrays wohl schneller sind als Listen, insb. wenn man einen numerischen Index hat.

Ähnliche Tests wie du mit Dokumente in ein Array habe ich auch mal gemacht und da war bei ca 8000 am Client schluss. Die Grenze scheint wohl sehr von den verfügbaren Ressourcen abzuhängen.

Zur Massenverarbeitung kann man je nach Anwendungsfall auch die NotesDocumentCollection verwenden (diese mach intern auch nichts anderes, als sich die Note-ID zu merken)
Die Dokumente kommen dann allerdings nicht unbedingt in der Reihenfolge zurück in der man sie einfügt und man muss einige Tricks machen um sich eine leere Collection zu erzeugen.
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: ArrayList in LS
« Antwort #7 am: 06.01.11 - 08:13:19 »
Peter,

wobei "List" in LotusScript in einer für Programmiersprachen höchst singulären Weise gebraucht wird. List meint in aller Regel so etwas wie einen hinsichtlich seiner Elemente variablen Array. Und java.util.ArrayList sowieso. Die Verwendung des Begriffs "List" in LotusScript stößt Java-Programmierern bei LotusScript meist verwirrend auf, da sie eine andere Datenstruktur erwarten. Hatten wir hier schon öfters.  

Gruß Axel
« Letzte Änderung: 06.01.11 - 08:15:07 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: ArrayList in LS
« Antwort #8 am: 09.01.11 - 08:28:37 »
... eine leere Collection erzeugen ist nicht schwer - es gibt die Möglichkeit Profildokumente einer Notesdatenbank in einer Collection zu initialisieren. Wenn du hier nach einem Profil suchst, das es nicht gibt, hast du eine leere Collection. Der kannst du dann deine Dokumente hinzufügen - die sind in der Folge, wie du sie eingefügt hast...

Toni
Grüßle Toni :)

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: ArrayList in LS
« Antwort #9 am: 10.01.11 - 08:03:43 »
Da bin ich mal ein paar Tage nicht da und schon füllt sich der Thread.  :)

Ich denke ich werde mich mal dran machen, mir die Struktur nach meinen Bedürfnissen aufzubauen. Die Grenzen wären hier erst einmal vernachlässigbar, da die Datenstruktur nur eine "geringe" Anzahl von meinen Objekten enthalten soll. Ist sicherlich dann nicht uneingeschränkt einsetzbar aber, aber solange man die Grenzen kennt, wird's wohl passen.


Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: ArrayList in LS
« Antwort #10 am: 11.01.11 - 07:27:41 »
Moin,

hab's jetzt mal anhand der Java Dokumentation mal nach programmiert. Ist wirklich nichts weltbewegendes, sondern wirklich nur eine Sammlung von Methoden, um ein dynamisches Array zu bestücken bzw. zu bearbeiten.

Vorteile, bei der Verwendung von Dokumenten zum Bestücken des Konstrukts sehe ich im Moment nicht. Jedoch ist es sicherlich recht brauchbar, wenn man es mit einer begrenzten Anzahl von Objekten bestückt.

Lessons learned: Mit dem ArrayList-Konstrukt, das ich in meine Standardbibliotheken integriert habe, habe ich nun eine Datenstruktur, in der ich kleinere Mengen von Daten halten kann, ohne mir großartig Gedanken drüber machen muss.

VG, Michael

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz