Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Gộp 2 mảng không trùng lặp trong ListView Android

Merge 2 Arrays Không Trùng Lặp (Union) trong Android

Hướng dẫn gộp hai mảng chuỗi thành một danh sách duy nhất (loại bỏ phần tử trùng lặp) sử dụng HashSet và hiển thị lên ListView.

Bước 1: Tạo dự án mới

Android Studio → File → New Project.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Bước 3: Code logic (src/MainActivity.java)

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

public class MainActivity extends AppCompatActivity {

    ListView list;
    String[] names = new String[] {"A", "B", "C"};
    String[] extended = new String[5]; // Mảng rỗng size 5

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = findViewById(R.id.list);

        // Điền dữ liệu vào extended
        extended[3] = "D";
        extended[4] = "E";
        // extended = [null, null, null, "D", "E"]

        // Copy names vào đầu extended
        System.arraycopy(names, 0, extended, 0, names.length);
        // extended = ["A", "B", "C", "D", "E"]

        // Loại bỏ trùng lặp bằng HashSet
        HashSet<String> unique = new HashSet<>(Arrays.asList(extended));
        unique.addAll(Arrays.asList(names)); // Thêm names lần nữa (không ảnh hưởng do Set)

        // Chuyển về ArrayList để dùng cho Adapter
        ArrayList<String> arrayList = new ArrayList<>(unique);

        ArrayAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, arrayList);
        list.setAdapter(adapter);
    }
}

Giải thích các bước

  1. System.arraycopy: Copy mảng names vào extended từ vị trí 0.
  2. Arrays.asList(extended): Chuyển mảng thành List (chứa null).
  3. HashSet: Tự động loại bỏ null và phần tử trùng lặp.
  4. unique.addAll(): Thêm thêm elements từ names (Set đảm bảo unique).

Cách hiện đại hơn (Java 8+ / API 24+)

// Stream API - ngắn gọn, rõ ràng
List<String> merged = Stream.of(names, extended)
    .flatMap(Arrays::stream)
    .filter(Objects::nonNull) // Loại null
    .distinct()               // Loại trùng
    .collect(Collectors.toList());

Chạy ứng dụng

ListView hiển thị: A, B, C, D, E (không trùng, không null).

Gộp 2 mảng không trùng lặp trong ListView Android