farhad_shiri_ex
سه شنبه 18 اردیبهشت 1397, 01:28 صبح
با سلام
برای یافتن یک مقدار Max ویا Min یک مدل کلاس براساس الگوی Compare خودتون در لیست های پیوندی به صورت یک متد ژنریک از متد های زیر استفاده نمایید.
public <E extends Comparable<? super E>> E max(List<? extends E> list, boolean sorted) {
Stream<? extends E> stream = list.stream();
Optional<E> optional = stream
.sorted()
.collect(Collectors.maxBy((o1, o2) ->
sorted ? o1.compareTo(o2) == 1 ? 0 : 1
: o1.compareTo(o2)));
return optional.isPresent() ? optional.get() : list.get(0) ;
}
واینهم Min
public <E extends Comparable<? super E>> E min(List<? extends E> list, boolean sorted) {
Stream<? extends E> stream = list.stream();
Optional<E> optional = stream
.collect(Collectors.minBy((o1, o2) ->
sorted ? o1.compareTo(o2) == -1 ? 0 : 1
: o1.compareTo(o2)));
return optional.isPresent() ? optional.get() : list.get(0) ;
}
البته همونطور که عرض کردم حتما در کلاسی که به لیست متصل کردید اینترفیس Comparable را پیاده سازی نمایید.
مثل این متد...
@Override
public int compareTo(@NonNull modelDao o) {
return o.weight > this.weight ? 1 : o.weight < this.weight ? -1 : 0 ;
}
حتما باید از جاوا 8 به بعد کامپایل کنید.
برای یافتن یک مقدار Max ویا Min یک مدل کلاس براساس الگوی Compare خودتون در لیست های پیوندی به صورت یک متد ژنریک از متد های زیر استفاده نمایید.
public <E extends Comparable<? super E>> E max(List<? extends E> list, boolean sorted) {
Stream<? extends E> stream = list.stream();
Optional<E> optional = stream
.sorted()
.collect(Collectors.maxBy((o1, o2) ->
sorted ? o1.compareTo(o2) == 1 ? 0 : 1
: o1.compareTo(o2)));
return optional.isPresent() ? optional.get() : list.get(0) ;
}
واینهم Min
public <E extends Comparable<? super E>> E min(List<? extends E> list, boolean sorted) {
Stream<? extends E> stream = list.stream();
Optional<E> optional = stream
.collect(Collectors.minBy((o1, o2) ->
sorted ? o1.compareTo(o2) == -1 ? 0 : 1
: o1.compareTo(o2)));
return optional.isPresent() ? optional.get() : list.get(0) ;
}
البته همونطور که عرض کردم حتما در کلاسی که به لیست متصل کردید اینترفیس Comparable را پیاده سازی نمایید.
مثل این متد...
@Override
public int compareTo(@NonNull modelDao o) {
return o.weight > this.weight ? 1 : o.weight < this.weight ? -1 : 0 ;
}
حتما باید از جاوا 8 به بعد کامپایل کنید.