package com.levelup.java.number;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.junit.Assert.assertThat;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.google.common.base.Predicate;
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Iterables;
import com.google.common.collect.Range;
/**
* This java example will demonstrate returning all even
* numbers within a given range.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/generate-even-numbers-within-range/'>Generate even numbers</a>
*/
public class GenerateEvenNumbers {
private static final Logger logger = Logger.getLogger(GenerateEvenNumbers.class);
@Test
public void generate_even_numbers_in_range_java8() {
Set<Integer> evenNumbers = IntStream.rangeClosed(1, 10)
.filter(n -> n % 2 == 0).boxed().collect(Collectors.toSet());
logger.info(evenNumbers);
assertThat(
evenNumbers,
contains(new Integer(2), new Integer(4), new Integer(6),
new Integer(8), new Integer(10)));
}
@Test
public void generate_even_numbers_in_range_guava() {
Set<Integer> set = ContiguousSet.create(Range.closed(1, 10),
DiscreteDomain.integers());
Iterable<Integer> evenNumbers = Iterables.filter(set,
new Predicate<Integer>() {
@Override
public boolean apply(Integer input) {
return input % 2 == 0;
}
});
assertThat(
evenNumbers,
contains(new Integer(2), new Integer(4), new Integer(6),
new Integer(8), new Integer(10)));
}
}