Java Stream.distinct() – انجمن DEV

Summarize this content to 400 words in Persian Lang
متد Stream.distinct() در جاوا برای فیلتر کردن عناصر تکراری از یک جریان استفاده میشود و اطمینان حاصل میکند که جریان حاصل فقط حاوی عناصر منحصربهفرد است. بر اساس متد ()quals اشیاء در جریان کار می کند.
این روش بخشی از Java Stream API است که در جاوا 8 معرفی شده است و معمولاً برای مدیریت مجموعه ها یا آرایه هایی با مقادیر تکراری استفاده می شود.
مثال 1: حذف موارد تکراری از لیست رشته ها
تصور کنید فهرستی از نام ها دارید و برخی از نام ها تکرار می شوند. شما لیستی از نام های منحصر به فرد می خواهید.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// List of names with duplicates
List names = List.of(“Alice”, “Bob”, “Alice”, “Charlie”, “Bob”, “David”);
// Use Stream.distinct() to remove duplicates
List uniqueNames = names.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueNames);
// Output: [Alice, Bob, Charlie, David]
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
چگونه کار می کند:
متد distinct() هر نام را با هم مقایسه می کند و تنها اولین رخداد تکراری را نگه می دارد.
مثال 2: حذف موارد تکراری از لیست اعدادبیایید لیستی از اعدادی را که در آن موارد تکراری وجود دارد، تهیه کنیم و فقط اعداد منحصر به فرد را استخراج کنیم.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// List of numbers with duplicates
List numbers = List.of(1, 2, 3, 2, 4, 3, 5);
// Use Stream.distinct() to remove duplicates
List uniqueNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueNumbers);
// Output: [1, 2, 3, 4, 5]
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
چگونه کار می کند:
اعداد با استفاده از برابری طبیعی خود (بر اساس برابر () برای عدد صحیح مقایسه می شوند، بنابراین موارد تکراری فیلتر می شوند.
مثال 3: کار با اشیاء سادهبیایید یک Product کلاس ایجاد کنیم و موارد تکراری را بر اساس شناسه محصول حذف کنیم.
کد:
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class Product {
private int id;
private String name;
public Product(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return id == product.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return “Product{id=” + id + “, name=”” + name + “”}”;
}
}
public class Main {
public static void main(String[] args) {
// List of products with duplicates (based on id)
List products = List.of(
new Product(1, “Laptop”),
new Product(2, “Tablet”),
new Product(1, “Laptop”), // Duplicate
new Product(3, “Smartphone”),
new Product(2, “Tablet”) // Duplicate
);
// Use Stream.distinct() to remove duplicates
List uniqueProducts = products.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueProducts);
// Output:
// [Product{id=1, name=”Laptop”}, Product{id=2, name=”Tablet”}, Product{id=3, name=”Smartphone”}]
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توضیح:
بررسی برابری: برای اطمینان از اینکه اشیاء محصول بر اساس شناسه آنها برابر در نظر گرفته می شوند، متد () برابر باطل می شود.
Duplicate Removal: هنگامی که distinct() با دو محصول با شناسه یکسان روبرو می شود، تنها محصول اول را نگه می دارد.
خروجی: لیستی از محصولات منحصر به فرد دریافت می کنید.
درک ساده شده
برای اشیاء اولیه یا ساده (مانند عدد صحیح، رشته):
()distinct با مقایسه مستقیم مقادیر، موارد تکراری را حذف می کند.
مثال: [1, 2, 2, 3] تبدیل می شود [1, 2, 3].
برای اشیاء سفارشی:
شما باید متدهای ()quals و ()hashCode را برای کلاس پیاده سازی کنید.
distinct() از این متدها برای تعیین تکراری بودن دو شی استفاده می کند.
Use Case: فیلتر کردن نام های تکراری از ورودی کاربرتصور کنید یک کاربر نام ها را به طور مکرر در یک فرم وارد می کند، و شما می خواهید مطمئن شوید که فقط نام های منحصر به فرد ذخیره می شوند.
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// Simulate user input
List userInput = new ArrayList<>();
userInput.add(“John”);
userInput.add(“Mary”);
userInput.add(“John”); // Duplicate
userInput.add(“Alice”);
// Remove duplicates
List uniqueInput = userInput.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueInput); // Output: [John, Mary, Alice]
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این تضمین می کند که برنامه فقط نام های منحصر به فرد را بدون نیاز به بررسی دستی برای موارد تکراری ذخیره می کند.
غذای آماده نهایی:
distinct() ساده است: موارد تکراری را از یک جریان حذف می کند.
برای انواع اولیه یا غیرقابل تغییر: فقط مستقیماً از آن استفاده کنید.
برای اشیاء سفارشی: از پیاده سازی مناسب برابر () و hashCode() اطمینان حاصل کنید.
نکته عملی: از آن برای پاکسازی داده های تکراری به هر شکلی (مثلاً لیست ها، ورودی های کاربر، نتایج پایگاه داده) استفاده کنید.
متد Stream.distinct() در جاوا برای فیلتر کردن عناصر تکراری از یک جریان استفاده میشود و اطمینان حاصل میکند که جریان حاصل فقط حاوی عناصر منحصربهفرد است. بر اساس متد ()quals اشیاء در جریان کار می کند.
این روش بخشی از Java Stream API است که در جاوا 8 معرفی شده است و معمولاً برای مدیریت مجموعه ها یا آرایه هایی با مقادیر تکراری استفاده می شود.
مثال 1: حذف موارد تکراری از لیست رشته ها
تصور کنید فهرستی از نام ها دارید و برخی از نام ها تکرار می شوند. شما لیستی از نام های منحصر به فرد می خواهید.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// List of names with duplicates
List names = List.of("Alice", "Bob", "Alice", "Charlie", "Bob", "David");
// Use Stream.distinct() to remove duplicates
List uniqueNames = names.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueNames);
// Output: [Alice, Bob, Charlie, David]
}
}
چگونه کار می کند:
متد distinct() هر نام را با هم مقایسه می کند و تنها اولین رخداد تکراری را نگه می دارد.
مثال 2: حذف موارد تکراری از لیست اعداد
بیایید لیستی از اعدادی را که در آن موارد تکراری وجود دارد، تهیه کنیم و فقط اعداد منحصر به فرد را استخراج کنیم.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// List of numbers with duplicates
List numbers = List.of(1, 2, 3, 2, 4, 3, 5);
// Use Stream.distinct() to remove duplicates
List uniqueNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueNumbers);
// Output: [1, 2, 3, 4, 5]
}
}
چگونه کار می کند:
اعداد با استفاده از برابری طبیعی خود (بر اساس برابر () برای عدد صحیح مقایسه می شوند، بنابراین موارد تکراری فیلتر می شوند.
مثال 3: کار با اشیاء ساده
بیایید یک Product کلاس ایجاد کنیم و موارد تکراری را بر اساس شناسه محصول حذف کنیم.
کد:
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class Product {
private int id;
private String name;
public Product(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return id == product.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "Product{id=" + id + ", name="" + name + ""}";
}
}
public class Main {
public static void main(String[] args) {
// List of products with duplicates (based on id)
List products = List.of(
new Product(1, "Laptop"),
new Product(2, "Tablet"),
new Product(1, "Laptop"), // Duplicate
new Product(3, "Smartphone"),
new Product(2, "Tablet") // Duplicate
);
// Use Stream.distinct() to remove duplicates
List uniqueProducts = products.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueProducts);
// Output:
// [Product{id=1, name="Laptop"}, Product{id=2, name="Tablet"}, Product{id=3, name="Smartphone"}]
}
}
توضیح:
بررسی برابری: برای اطمینان از اینکه اشیاء محصول بر اساس شناسه آنها برابر در نظر گرفته می شوند، متد () برابر باطل می شود.
Duplicate Removal: هنگامی که distinct() با دو محصول با شناسه یکسان روبرو می شود، تنها محصول اول را نگه می دارد.
خروجی: لیستی از محصولات منحصر به فرد دریافت می کنید.
درک ساده شده
- برای اشیاء اولیه یا ساده (مانند عدد صحیح، رشته):
()distinct با مقایسه مستقیم مقادیر، موارد تکراری را حذف می کند.
مثال: [1, 2, 2, 3] تبدیل می شود [1, 2, 3].
- برای اشیاء سفارشی:
شما باید متدهای ()quals و ()hashCode را برای کلاس پیاده سازی کنید.
distinct() از این متدها برای تعیین تکراری بودن دو شی استفاده می کند.
Use Case: فیلتر کردن نام های تکراری از ورودی کاربر
تصور کنید یک کاربر نام ها را به طور مکرر در یک فرم وارد می کند، و شما می خواهید مطمئن شوید که فقط نام های منحصر به فرد ذخیره می شوند.
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// Simulate user input
List userInput = new ArrayList<>();
userInput.add("John");
userInput.add("Mary");
userInput.add("John"); // Duplicate
userInput.add("Alice");
// Remove duplicates
List uniqueInput = userInput.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueInput); // Output: [John, Mary, Alice]
}
}
این تضمین می کند که برنامه فقط نام های منحصر به فرد را بدون نیاز به بررسی دستی برای موارد تکراری ذخیره می کند.
غذای آماده نهایی:
distinct() ساده است: موارد تکراری را از یک جریان حذف می کند.
برای انواع اولیه یا غیرقابل تغییر: فقط مستقیماً از آن استفاده کنید.
برای اشیاء سفارشی: از پیاده سازی مناسب برابر () و hashCode() اطمینان حاصل کنید.
نکته عملی: از آن برای پاکسازی داده های تکراری به هر شکلی (مثلاً لیست ها، ورودی های کاربر، نتایج پایگاه داده) استفاده کنید.