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 odd * numbers within a given range. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/generate-odd-numbers-within-range/'>Generate odd numbers in range</a> */ public class GenerateOddNumbers { private static final Logger logger = Logger .getLogger(GenerateOddNumbers.class); @Test public void generate_odd_numbers_in_range_java8() { Set<Integer> oddNumbers = IntStream.rangeClosed(1, 10) .filter(n -> n % 2 != 0).boxed().collect(Collectors.toSet()); logger.info(oddNumbers); assertThat( oddNumbers, contains(new Integer(1), new Integer(3), new Integer(5), new Integer(7), new Integer(9))); } @Test public void generate_odd_numbers_in_range_guava() { Set<Integer> set = ContiguousSet.create(Range.closed(1, 10), DiscreteDomain.integers()); Iterable<Integer> oddNumbers = Iterables.filter(set, new Predicate<Integer>() { @Override public boolean apply(Integer input) { return input % 2 != 0; } }); logger.info(oddNumbers); assertThat( oddNumbers, contains(new Integer(1), new Integer(3), new Integer(5), new Integer(7), new Integer(9))); } }