Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2020-11-02, 21:14
  #1
Medlem
Hur söker jag i en arraylist som har flera parametrar?

Vill exempelvis söka efter nr 5 i en arraylist med objekt där varje objekt har 3 parametrar (String, boolean, int)?

Vill alltså enbart söka i 3:e fältet (int). Hur gör jag? .contains() metoden funkar bra om listan innehåller ett värde för varje index men får det inte att funka i detta exempel??
__________________
Senast redigerad av bosscs2 2020-11-02 kl. 21:16.
Citera
2020-11-02, 21:26
  #2
Medlem
Gör en loop.

for(i=0; i < mylist.count(); i++) {
if(mylist[i] .intValue == searchedValue)
return mylist[i];
}

Typ.
Citera
2020-11-02, 21:32
  #3
Medlem
Citat:
Ursprungligen postat av bosscs2
Hur söker jag i en arraylist som har flera parametrar?

Vill exempelvis söka efter nr 5 i en arraylist med objekt där varje objekt har 3 parametrar (String, boolean, int)?

Vill alltså enbart söka i 3:e fältet (int). Hur gör jag? .contains() metoden funkar bra om listan innehåller ett värde för varje index men får det inte att funka i detta exempel??
Googlade lite,
Försök göra om listan till en stream och sedan söker du i din stream med filter och någon condition

https://mkyong.com/java8/java-8-stre...lter-examples/

C# är mkt lättare här med Linq
Citera
2020-11-02, 21:35
  #4
Medlem
Citat:
Ursprungligen postat av dopestghost
Gör en loop.

for(i=0; i < mylist.count(); i++) {
if(mylist[i] .intValue == searchedValue)
return mylist[i];
}

Typ.

problemet är att "mylist[]" innehåller 3 parametrar "mylist[i,j,k]". Hur stoppar jag loopen när parameter k matchar mitt invärde?
Citera
2020-11-02, 21:43
  #5
Medlem
Citat:
Ursprungligen postat av bosscs2
problemet är att "mylist[]" innehåller 3 parametrar "mylist[i,j,k]". Hur stoppar jag loopen när parameter k matchar mitt invärde?
du menar att ett element innehåller 3 parametrar?

så det hen skrev där är rätt
Citera
2020-11-02, 21:47
  #6
Medlem
Citat:
Citat:
Ursprungligen postat av dopestghost
Gör en loop.

for(i=0; i < mylist.count(); i++) {
if(mylist[i] .intValue == searchedValue)
return mylist[i];
}

Typ.

problemet är att "mylist[]" innehåller 3 parametrar "mylist[i,j,k]". Hur stoppar jag loopen när parameter k matchar mitt invärde?

Om jag förstår dig rätt består din lista av ett objekt som i sin tur har 3 parametrar:

List<MyObject(string, string, int)>

Stoppar du detta objekt i en lista kommer inte varje parameter av objektet okupera en separat plats i listan. D.v.s du kommer inte åt parametern genom att indexera för varje parameter utan som dopestghost skrev, plockar du ut varje objekt ur listan (som kan referera till sin egen intvalue referens) och kollar ditt villkor.

MyObject instanseras typ som:

MyObject mo = new MyObject("s1", "s2", 3);

Förutsatt att du i ditt objekt har en metod för att hämta dessa värden, kollar du på exempelvis din intparameter enligt: mo.getIntValue();
__________________
Senast redigerad av Sabelstefan 2020-11-02 kl. 21:53.
Citera
2020-11-02, 21:48
  #7
Medlem
mtmmtms avatar
Citat:
Ursprungligen postat av bosscs2
Hur söker jag i en arraylist som har flera parametrar?

Vill exempelvis söka efter nr 5 i en arraylist med objekt där varje objekt har 3 parametrar (String, boolean, int)?

Vill alltså enbart söka i 3:e fältet (int). Hur gör jag? .contains() metoden funkar bra om listan innehåller ett värde för varje index men får det inte att funka i detta exempel??

Om du enbart vill söka i element 5 så gör du x.get(4) sedan anropar du metoden som hämtar fält 3.
Du borde beskriva på övergripande nivå vad du vill åstadkomma. Det kan vara bättre att organisera ditt data så att frågan kan göras utan att iterera element (genom en Map?).
Citera
2020-11-02, 23:07
  #8
Medlem
Citat:
Ursprungligen postat av bosscs2
Hur söker jag i en arraylist som har flera parametrar?

Vill exempelvis söka efter nr 5 i en arraylist med objekt där varje objekt har 3 parametrar (String, boolean, int)?

Vill alltså enbart söka i 3:e fältet (int). Hur gör jag? .contains() metoden funkar bra om listan innehåller ett värde för varje index men får det inte att funka i detta exempel??

Det borde väl gå att använda contains. Du kan väl instantiera ett objekt av valfri typ med en equals-metod som är lämplig för att hitta det objekt du är ute efter.

Citat:
Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).

https://docs.oracle.com/javase/7/doc...va.lang.Object)
Citera
2020-11-03, 11:37
  #9
Medlem
blackadder1s avatar
Nåt liknande kanske?

Predicate<myObject> p1 = o -> o.getMyValue == 5;
myList.stream().filter(p1). forEach(System.out:rintln);

Helt otestat.
Citera
2020-11-03, 11:41
  #10
Medlem
Endera med en for-loop:
Kod:
MyObj foundObj = null;
for (MyObj obj : myList) {
    if (obj.getIntField() == 5) {
        foundObj = obj;
    }
}

Eller med streams:
Kod:
MyObj foundObj = myList.stream().filter(o -> o.getIntField() == 5).findFirst().orElse(null);
Citera
2020-11-07, 09:02
  #11
Medlem
[quote=erkki17|73459220]Endera med en for-loop:
Kod:
MyObj foundObj = null;
for (MyObj obj : myList) {
    if (obj.getIntField() == 5) {
        foundObj = obj;
    }
}

Är getIntField metoden en standardlösning vid den här typen av problem? Aldrig hört talas om den tidigare och har inte eclipse här att prova metoden mot.
Citera
2020-11-07, 09:08
  #12
Medlem
Citat:
Ursprungligen postat av Sabelstefan
Om jag förstår dig rätt består din lista av ett objekt som i sin tur har 3 parametrar:

Ja precis, det Ghost skriver, är .intValue() en egendefinierad metod?
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback