In this Q&A, we'll go over a few options to reverse a list.
There are two options to reverse a list
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
public class Reverse {
public static List<Integer> reverseWitItereator(List<Integer> l) {
List<Integer> l2 = new ArrayList<>();
ListIterator<Integer> rev = l.listIterator(l.size());
while(rev.hasPrevious()) {
l2.add(rev.previous());
}
return l2;
}
public static List<Integer> reverseWithStream(List<Integer> l) {
return l.stream().map((i) -> l.size()-1-i ).collect(Collectors.toList());
}
public static void reverseInPlace(List<Integer> l) {
Collections.reverse(l);
}
public static List<Integer> reverView(List<Integer> l) {
return Lists.reverse(l);
}
public static void main( String[] args ) {
List<Integer> l1 = new ArrayList<>();
for(int i=0; i < 100; ++i) {
l1.add(i);
}
List<Integer> l2 = reverseWitItereator(l1);
l2 = reverseWithStream(l1);
System.out.println("end");
l2 = reverView(l1);
l1.add(101);
assertEquals("reverse check", l2.get(0).longValue(), 101);
}
}
How to reverse and create a new list
There are two options to reverse a list
- using iterators. See function reverseWitItereator
- using stream. See function reverseWithStream
How to reverse a list in place
If you want to reverse a list in place use Collections.reverse. See function reverseInPlace
How to create a reverse list view
If you want to create a reverse view use Guava Lists.reverse. Reverse view ensures that changes to the original list are reflected in the new list in reverse order.
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
public class Reverse {
public static List<Integer> reverseWitItereator(List<Integer> l) {
List<Integer> l2 = new ArrayList<>();
ListIterator<Integer> rev = l.listIterator(l.size());
while(rev.hasPrevious()) {
l2.add(rev.previous());
}
return l2;
}
public static List<Integer> reverseWithStream(List<Integer> l) {
return l.stream().map((i) -> l.size()-1-i ).collect(Collectors.toList());
}
public static void reverseInPlace(List<Integer> l) {
Collections.reverse(l);
}
public static List<Integer> reverView(List<Integer> l) {
return Lists.reverse(l);
}
public static void main( String[] args ) {
List<Integer> l1 = new ArrayList<>();
for(int i=0; i < 100; ++i) {
l1.add(i);
}
List<Integer> l2 = reverseWitItereator(l1);
l2 = reverseWithStream(l1);
System.out.println("end");
l2 = reverView(l1);
l1.add(101);
assertEquals("reverse check", l2.get(0).longValue(), 101);
}
}
Comments
Post a Comment