
fj.data.Java Maven / Gradle / Ivy
package fj.data;
import fj.*;
import static fj.P.p;
import static fj.data.Option.some;
import java.util.Arrays;
import java.util.Collection;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Stack;
import java.util.TreeSet;
import java.util.Vector;
import java.util.Iterator;
import java.util.NoSuchElementException;
import static java.util.EnumSet.copyOf;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.SynchronousQueue;
/**
* Functions that convert between types from the core Java API.
*
* @version %build.number%
*/
public final class Java {
private Java() {
throw new UnsupportedOperationException();
}
// BEGIN List ->
/**
* A function that converts lists to array lists.
*
* @return A function that converts lists to array lists.
*/
public static F, ArrayList> List_ArrayList() {
return as -> new ArrayList<>(as.toCollection());
}
/**
* A function that converts lists to bit sets.
*/
public static final F, BitSet> List_BitSet = bs -> {
final BitSet s = new BitSet(bs.length());
bs.zipIndex().foreachDoEffect(bi -> s.set(bi._2(), bi._1()));
return s;
};
/**
* A function that converts lists to array enum sets.
*
* @return A function that converts lists to enum sets.
*/
public static > F, EnumSet> List_EnumSet() {
return as -> copyOf(as.toCollection());
}
/**
* A function that converts lists to hash sets.
*
* @return A function that converts lists to hash sets.
*/
public static F, HashSet> List_HashSet() {
return as -> new HashSet<>(as.toCollection());
}
/**
* A function that converts lists to linked hash sets.
*
* @return A function that converts lists to linked hash sets.
*/
public static F, LinkedHashSet> List_LinkedHashSet() {
return as -> new LinkedHashSet<>(as.toCollection());
}
/**
* A function that converts lists to linked lists.
*
* @return A function that converts lists to linked lists.
*/
public static F, LinkedList> List_LinkedList() {
return as -> new LinkedList<>(as.toCollection());
}
/**
* A function that converts lists to priority queues.
*
* @return A function that converts lists to priority queues.
*/
public static F, PriorityQueue> List_PriorityQueue() {
return as -> new PriorityQueue<>(as.toCollection());
}
/**
* A function that converts lists to stacks.
*
* @return A function that converts lists to stacks.
*/
public static F, Stack> List_Stack() {
return as -> {
final Stack s = new Stack<>();
s.addAll(as.toCollection());
return s;
};
}
/**
* A function that converts lists to stacks.
*
* @return A function that converts lists to stacks.
*/
public static F, TreeSet> List_TreeSet() {
return as -> new TreeSet<>(as.toCollection());
}
/**
* A function that converts lists to vectors.
*
* @return A function that converts lists to vectors.
*/
public static F, Vector> List_Vector() {
return as -> new Vector<>(as.toCollection());
}
/**
* A function that converts lists to array blocking queue.
*
* @param fair The argument to pass to the constructor of the array blocking queue.
* @return A function that converts lists to array blocking queue.
*/
public static F, ArrayBlockingQueue> List_ArrayBlockingQueue(final boolean fair) {
return as -> new ArrayBlockingQueue<>(as.length(), fair, as.toCollection());
}
/**
* A function that converts lists to concurrent linked queues.
*
* @return A function that converts lists to concurrent linked queues.
*/
public static F, ConcurrentLinkedQueue> List_ConcurrentLinkedQueue() {
return as -> new ConcurrentLinkedQueue<>(as.toCollection());
}
/**
* A function that converts lists to copy on write array lists.
*
* @return A function that converts lists to copy on write array lists.
*/
public static F, CopyOnWriteArrayList> List_CopyOnWriteArrayList() {
return as -> new CopyOnWriteArrayList<>(as.toCollection());
}
/**
* A function that converts lists to copy on write array sets.
*
* @return A function that converts lists to copy on write array sets.
*/
public static F, CopyOnWriteArraySet> List_CopyOnWriteArraySet() {
return as -> new CopyOnWriteArraySet<>(as.toCollection());
}
/**
* A function that converts lists to delay queues.
*
* @return A function that converts lists to delay queues.
*/
public static F, DelayQueue> List_DelayQueue() {
return as -> new DelayQueue<>(as.toCollection());
}
/**
* A function that converts lists to linked blocking queues.
*
* @return A function that converts lists to linked blocking queues.
*/
public static F, LinkedBlockingQueue> List_LinkedBlockingQueue() {
return as -> new LinkedBlockingQueue<>(as.toCollection());
}
/**
* A function that converts lists to priority blocking queues.
*
* @return A function that converts lists to priority blocking queues.
*/
public static F, PriorityBlockingQueue> List_PriorityBlockingQueue() {
return as -> new PriorityBlockingQueue<>(as.toCollection());
}
/**
* A function that converts lists to synchronous queues.
*
* @param fair The argument to pass to the constructor of the synchronous queue.
* @return A function that converts lists to synchronous queues.
*/
public static F, SynchronousQueue> List_SynchronousQueue(final boolean fair) {
return as -> {
final SynchronousQueue q = new SynchronousQueue<>(fair);
q.addAll(as.toCollection());
return q;
};
}
// END List ->
// BEGIN Array ->
/**
* A function that converts arrays to array lists.
*
* @return A function that converts arrays to array lists.
*/
public static F, ArrayList> Array_ArrayList() {
return Array::toJavaList;
}
/**
* A function that converts arrays to bit sets.
*/
public static final F, BitSet> Array_BitSet = bs -> {
final BitSet s = new BitSet(bs.length());
bs.zipIndex().foreachDoEffect(bi -> s.set(bi._2(), bi._1()));
return s;
};
/**
* A function that converts arrays to enum sets.
*
* @return A function that converts arrays to enum sets.
*/
public static > F, EnumSet> Array_EnumSet() {
return as -> copyOf(as.asJavaList());
}
/**
* A function that converts arrays to hash sets.
*
* @return A function that converts arrays to hash sets.
*/
public static F, HashSet> Array_HashSet() {
return as -> new HashSet<>(as.asJavaList());
}
/**
* A function that converts arrays to linked hash sets.
*
* @return A function that converts arrays to linked hash sets.
*/
public static F, LinkedHashSet> Array_LinkedHashSet() {
return as -> new LinkedHashSet<>(as.asJavaList());
}
/**
* A function that converts arrays to linked lists.
*
* @return A function that converts arrays to linked lists.
*/
public static F, LinkedList> Array_LinkedList() {
return as -> new LinkedList<>(as.asJavaList());
}
/**
* A function that converts arrays to priority queues.
*
* @return A function that converts arrays to priority queues.
*/
public static F, PriorityQueue> Array_PriorityQueue() {
return as -> new PriorityQueue<>(as.asJavaList());
}
/**
* A function that converts arrays to stacks.
*
* @return A function that converts arrays to stacks.
*/
public static F, Stack> Array_Stack() {
return as -> {
final Stack s = new Stack<>();
s.addAll(as.asJavaList());
return s;
};
}
/**
* A function that converts arrays to tree sets.
*
* @return A function that converts arrays to tree sets.
*/
public static F, TreeSet> Array_TreeSet() {
return as -> new TreeSet<>(as.asJavaList());
}
/**
* A function that converts arrays to vectors.
*
* @return A function that converts arrays to vectors.
*/
public static F, Vector> Array_Vector() {
return as -> new Vector<>(as.asJavaList());
}
/**
* A function that converts arrays to array blocking queues.
*
* @param fair The argument to pass to the constructor of the array blocking queue.
* @return A function that converts arrays to array blocking queues.
*/
public static F, ArrayBlockingQueue> Array_ArrayBlockingQueue(final boolean fair) {
return as -> new ArrayBlockingQueue<>(as.length(), fair, as.asJavaList());
}
/**
* A function that converts arrays to concurrent linked queues.
*
* @return A function that converts arrays to concurrent linked queues.
*/
public static F, ConcurrentLinkedQueue> Array_ConcurrentLinkedQueue() {
return as -> new ConcurrentLinkedQueue<>(as.asJavaList());
}
/**
* A function that converts arrays to copy on write array lists.
*
* @return A function that converts arrays to copy on write array lists.
*/
public static F, CopyOnWriteArrayList> Array_CopyOnWriteArrayList() {
return as -> new CopyOnWriteArrayList<>(as.asJavaList());
}
/**
* A function that converts arrays to copy on write array sets.
*
* @return A function that converts arrays to copy on write array sets.
*/
public static F, CopyOnWriteArraySet> Array_CopyOnWriteArraySet() {
return as -> new CopyOnWriteArraySet<>(as.asJavaList());
}
/**
* A function that converts arrays to delay queues.
*
* @return A function that converts arrays to delay queues.
*/
public static F, DelayQueue> Array_DelayQueue() {
return as -> new DelayQueue<>(as.asJavaList());
}
/**
* A function that converts arrays to linked blocking queues.
*
* @return A function that converts arrays to linked blocking queues.
*/
public static F, LinkedBlockingQueue> Array_LinkedBlockingQueue() {
return as -> new LinkedBlockingQueue<>(as.asJavaList());
}
/**
* A function that converts arrays to priority blocking queues.
*
* @return A function that converts arrays to priority blocking queues.
*/
public static F, PriorityBlockingQueue> Array_PriorityBlockingQueue() {
return as -> new PriorityBlockingQueue<>(as.asJavaList());
}
/**
* A function that converts arrays to synchronous queues.
*
* @param fair The argument to pass to the constructor of the synchronous queue.
* @return A function that converts arrays to synchronous queues.
*/
public static F, SynchronousQueue> Array_SynchronousQueue(final boolean fair) {
return as -> {
final SynchronousQueue q = new SynchronousQueue<>(fair);
q.addAll(as.asJavaList());
return q;
};
}
// END Array ->
// BEGIN Stream ->
/**
* A function that converts streams to iterable.
*
* @return A function that converts streams to iterable.
*/
public static F, Iterable> Stream_Iterable() {
return as -> as;
}
/**
* A function that converts streams to array lists.
*
* @return A function that converts streams to array lists.
*/
public static F, ArrayList> Stream_ArrayList() {
return as -> new ArrayList<>(as.toCollection());
}
/**
* A function that converts streams to bit sets.
*/
public static final F, BitSet> Stream_BitSet = bs -> {
final BitSet s = new BitSet(bs.length());
bs.zipIndex().foreachDoEffect(bi -> s.set(bi._2(), bi._1()));
return s;
};
/**
* A function that converts streams to enum sets.
*
* @return A function that converts streams to enum sets.
*/
public static > F, EnumSet> Stream_EnumSet() {
return as -> copyOf(as.toCollection());
}
/**
* A function that converts streams to hash sets.
*
* @return A function that converts streams to hash sets.
*/
public static F, HashSet> Stream_HashSet() {
return as -> new HashSet<>(as.toCollection());
}
/**
* A function that converts streams to linked hash sets.
*
* @return A function that converts streams to linked hash sets.
*/
public static F, LinkedHashSet> Stream_LinkedHashSet() {
return as -> new LinkedHashSet<>(as.toCollection());
}
/**
* A function that converts streams to linked lists.
*
* @return A function that converts streams to linked lists.
*/
public static F, LinkedList> Stream_LinkedList() {
return as -> new LinkedList<>(as.toCollection());
}
/**
* A function that converts streams to priority queues.
*
* @return A function that converts streams to priority queues.
*/
public static F, PriorityQueue> Stream_PriorityQueue() {
return as -> new PriorityQueue<>(as.toCollection());
}
/**
* A function that converts streams to stacks.
*
* @return A function that converts streams to stacks.
*/
public static F, Stack> Stream_Stack() {
return as -> {
final Stack s = new Stack<>();
s.addAll(as.toCollection());
return s;
};
}
/**
* A function that converts streams to tree sets.
*
* @return A function that converts streams to tree sets.
*/
public static F, TreeSet> Stream_TreeSet() {
return as -> new TreeSet<>(as.toCollection());
}
/**
* A function that converts streams to vectors.
*
* @return A function that converts streams to vectors.
*/
public static F, Vector> Stream_Vector() {
return as -> new Vector<>(as.toCollection());
}
/**
* A function that converts streams to array blocking queues.
*
* @param fair The argument to pass to the constructor of the array blocking queue.
* @return A function that converts streams to array blocking queues.
*/
public static F, ArrayBlockingQueue> Stream_ArrayBlockingQueue(final boolean fair) {
return as -> new ArrayBlockingQueue<>(as.length(), fair, as.toCollection());
}
/**
* A function that converts streams to concurrent linked queues.
*
* @return A function that converts streams to concurrent linked queues.
*/
public static F, ConcurrentLinkedQueue> Stream_ConcurrentLinkedQueue() {
return as -> new ConcurrentLinkedQueue<>(as.toCollection());
}
/**
* A function that converts streams to copy on write array lists.
*
* @return A function that converts streams to copy on write array lists.
*/
public static F, CopyOnWriteArrayList> Stream_CopyOnWriteArrayList() {
return as -> new CopyOnWriteArrayList<>(as.toCollection());
}
/**
* A function that converts streams to copy on write array sets.
*
* @return A function that converts streams to copy on write array sets.
*/
public static F, CopyOnWriteArraySet> Stream_CopyOnWriteArraySet() {
return as -> new CopyOnWriteArraySet<>(as.toCollection());
}
/**
* A function that converts streams to delay queues.
*
* @return A function that converts streams to delay queues.
*/
public static F, DelayQueue> Stream_DelayQueue() {
return as -> new DelayQueue<>(as.toCollection());
}
/**
* A function that converts streams to linked blocking queues.
*
* @return A function that converts streams to linked blocking queues.
*/
public static F, LinkedBlockingQueue> Stream_LinkedBlockingQueue() {
return as -> new LinkedBlockingQueue<>(as.toCollection());
}
/**
* A function that converts streams to priority blocking queues.
*
* @return A function that converts streams to priority blocking queues.
*/
public static F, PriorityBlockingQueue> Stream_PriorityBlockingQueue() {
return as -> new PriorityBlockingQueue<>(as.toCollection());
}
/**
* A function that converts streams to synchronous queues.
*
* @param fair The argument to pass to the constructor of the synchronous queue.
* @return A function that converts streams to synchronous queues.
*/
public static F, SynchronousQueue> Stream_SynchronousQueue(final boolean fair) {
return as -> {
final SynchronousQueue q = new SynchronousQueue<>(fair);
q.addAll(as.toCollection());
return q;
};
}
// END Stream ->
// BEGIN Option ->
/**
* A function that converts options to array lists.
*
* @return A function that converts options to array lists.
*/
public static F