ArrayList sorting String_Dates and avoiding duplicates on adding.
Adding a new example to @Ezequiel post.
public class ArrayListSet {
static ArrayList<String> list = new java.util.ArrayList<String>();
public static void main(String[] args) {
String inputDatess = "15.10.2020,11.10.2020,12.10.2020,12.10.2020,18.10.2020,13.10.2020,14.10.2020,11.10.2020,"
+ "15.10.2020,15.10.2020,15.10.2020,16.10.2020,17.10.2020,18.10.2020,19.10.2020,20.10.2020,10.10.2020";
String[] dates = inputDatess.split(",");
for (int i = 0; i < dates.length; i++) {
listCustomAdd(dates[i]);
}
System.out.println("ArrayList with Custom Funciton for Add:\n"+list);
ArrayList<String> listSorted = getSortedDatesStrList(list.stream());
System.out.println("Sorted ArrayList:\n"+listSorted);
}
public static ArrayList<String> getSortedDatesStrList(Stream<String> stream) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
Comparator<String> comparator = Comparator.comparing(myData -> LocalDate.parse(myData, formatter));
ArrayList<String> sortedList = (ArrayList<String>) stream
.sorted(comparator)
.collect(Collectors.toList());
return sortedList;
}
public static void listCustomAdd(String dateStr) {
if( !list.contains(dateStr) )
list.add(dateStr);
}
}
Example with Customed ArrayList to sort and avoid duplicates:
public class CustomArrayListSet {
//static ArrayList<String> predefinedList = new java.util.ArrayList<String>();
static ArrayListCustomStr<String> customList = new ArrayListCustomStr<String>();
public static void main(String[] args) {
String inputDatess = "15.10.2020,11.10.2020,12.10.2020,12.10.2020,18.10.2020,13.10.2020,14.10.2020,11.10.2020,"
+ "15.10.2020,15.10.2020,15.10.2020,16.10.2020,17.10.2020,18.10.2020,19.10.2020,20.10.2020,10.10.2020";
String[] dates = inputDatess.split(",");
for (int i = 0; i < dates.length; i++) {
customList.add(dates[i]);
}
System.out.println("Custom ArrayList with override Add Function:\n"+customList);
customList.sortDatesStrList();
System.out.println("Sorted ArrayList:\n"+ customList );
}
}
class ArrayListCustomStr<T> implements Set<T> {
@Override
public String toString() {
StringBuffer buffer = new StringBuffer("[");
for (int i = 0; i < entries.size(); i++) {
buffer.append(entries.get(i));
if ( (i+1) < entries.size() ) buffer.append(", ");
}
buffer.append("]");
return buffer.toString();
}
public void sortDatesStrList() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
Comparator<String> comparator = Comparator.comparing(myData -> LocalDate.parse(myData, formatter));
ArrayList<String> sortedList = (ArrayList<String>) entries.stream()
.sorted(comparator)
.collect(Collectors.toList());
entries = sortedList;
}
private ArrayList<String> entries;
// Simple constructor using an array list for its entries.
public ArrayListCustomStr() {
super();
entries = new ArrayList<String>();
}
public int size() {
return entries.size();
}
public void clear() {
entries.clear();
}
public boolean isEmpty() {
return entries.isEmpty();
}
public Object[] toArray() {
return entries.toArray();
}
public boolean add(Object o) {
// Ignore existing entries to ensure Set interface contract
if (entries.contains(o))
return false;
return entries.add((String) o);
}
public boolean contains(Object o) {
return entries.contains(o);
}
public boolean remove(Object o) {
return entries.remove(o);
}
@SuppressWarnings("unchecked")
public boolean addAll(@SuppressWarnings("rawtypes") Collection c) {
return entries.addAll(c);
}
public boolean containsAll(@SuppressWarnings("rawtypes") Collection c) {
return entries.containsAll(c);
}
public boolean removeAll(@SuppressWarnings("rawtypes") Collection c) {
return entries.removeAll(c);
}
public boolean retainAll(@SuppressWarnings("rawtypes") Collection c) {
return entries.retainAll(c);
}
@SuppressWarnings("unchecked")
public Iterator<T> iterator() {
return (Iterator<T>) entries.iterator();
}
@SuppressWarnings("unchecked")
public Object[] toArray(Object[] a) {
return entries.toArray(a);
}
}