Si të konvertohet grupi në listë në Java
Listat në Java janë një koleksion i renditur i të dhënave, ndërsa grupet janë një koleksion i parregulluar i të dhënave. Një listë mund të ketë hyrje të dyfishta, një grup jo. Të dyja strukturat e të dhënave janë të dobishme në skenarë të ndryshëm.
Të dish se si të konvertosh një grup në një listë është e dobishme. Mund të konvertojë të dhëna të pa renditura në të dhëna të porositura.
Inicializimi i një grupi
Le të inicializojmë një grup dhe të shtojmë disa elementë në të.
import java.util.*;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
System.out.println(a);
}
}
Metoda add() e HashSet shton elementet në grup. Vini re se elementët janë të ndryshëm. Nuk ka asnjë mënyrë për të marrë elementet sipas renditjes së tyre të futjes pasi grupet janë të pa renditura.
Konvertimi i setit në listë në Java
Le ta kthejmë grupin në një listë. Ka shumë mënyra për ta bërë këtë. Secila mënyrë është e ndryshme nga tjetra dhe këto dallime janë delikate.
1. Konstruktori i listës me argument Set
Mënyra më e drejtpërdrejtë për të kthyer një grup në një listë është duke kaluar grupin si argument gjatë krijimit të listës. Kjo thërret konstruktorin dhe prej andej e tutje konstruktori kujdeset për pjesën tjetër.
import java.util.*;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr = new ArrayList<>(a);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Meqenëse grupi është konvertuar në një listë, elementët tani janë renditur. Kjo do të thotë që ne mund të përdorim metodën get() për të aksesuar elementët sipas indeksit.
2. Përdorimi konvencional për lak
Ne mund të përdorim lidhjen e vjetër for për të kopjuar në mënyrë të qartë elementet nga grupi në listë.
import java.util.*;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr = new ArrayList<>(a);
for (int i : a)
arr.add(i);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
For loop kalon mbi grupin element pas elementi dhe i shton elementet në listë.
3. Listoni metodën addAll().
Listat kanë një metodë të quajtur addAll() që shton shumë vlera në listë në të njëjtën kohë. Ju mund ta kujtoni këtë operacion nga përdorimi i tij në bashkimin e dy listave. addAll() gjithashtu punon për shtimin e elementeve të një grupi në një listë.
import java.util.*;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr = new ArrayList<>();
arr.addAll(a);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
4. Metoda Stream API collect().
Stream.collect() ofrohet nga Java 8 e tutje. Koleksionisti ToList mbledh të gjithë elementët Tream në një shembull Liste.
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr;
arr = a.stream().collect(Collectors.toList());
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Dokumentacioni për stream.collect() përmend se nuk ka asnjë garanci për llojin, ndryshueshmërinë, serializimin ose sigurinë e fillesave të Listës së kthyer. Nëse kërkohet më shumë kontroll mbi Listën e kthyer, përdorni toCollection(Furnizuesi).
Për të specifikuar llojin e listës përdorni toCollection(ArrayList::new)
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr;
arr = a.stream().collect(Collectors.toCollection(ArrayList::new));
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Lexim i rekomanduar: Transmetimet në Java
5. Metoda List.copyOf().
Lista e Java 10 e tutje ka një metodë copyOf(). Metoda kthen një listë të pamodifikueshme që përmban elementet e Koleksionit të dhënë, në rendin e përsëritjes së tij. Lista nuk mund të përmbajë asnjë element null. Në rast se grupi përmban 'null', metoda kthen një përjashtim të treguesit null.
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
List<Integer> arr;
arr = List.copyOf(a);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Shtimi i një null në grup dhe përpjekja për ta kthyer në një listë:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
a.add(null);
List<Integer> arr;
arr = List.copyOf(a);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Nëse përpiqeni të shtoni një element në një listë të pandryshueshme, do të merrni një gabim që duket si më poshtë.
Duke përdorur metodën addAll() për të kthyer grupin me element null në një listë:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(3);
a.add(1);
a.add(null);
List<Integer> arr = new ArrayList<>();
arr.addAll(a);
// arr = List.copyOf(a);
System.out.println(arr);
System.out.println(arr.get(1));
}
}
Vini re se null shfaqet në fillim të listës.
konkluzioni
Ne pamë disa metoda vërtet interesante për të kthyer një grup në një listë. Është e rëndësishme t'i kushtohet vëmendje llojit të listës që krijohet nga secila metodë. Ashtu si metoda copyOf() prodhon një listë të pandryshueshme dhe nuk mund të trajtojë elementë null. Ndërsa, stream.collect() nuk garanton asgjë. Constructor dhe addAll() janë më të besueshmet në grup.