Revert "build: Downgrade to Java 1.7"

This reverts commit bc30e65ea2d14d71fabca92c96aef089f4b77d43.

Change-Id: If6bcd1218c6d0e3753af7ad351fba4784b5ac6ad
diff --git a/.travis.yml b/.travis.yml
index e358d25..9bcf999 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,3 @@
 language: java
 jdk:
-  - oraclejdk7
+  - oraclejdk8
diff --git a/nb-configuration.xml b/nb-configuration.xml
index 932be69..36ad590 100644
--- a/nb-configuration.xml
+++ b/nb-configuration.xml
@@ -29,6 +29,6 @@
         <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap>none</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap>
         <org-netbeans-modules-editor-indent.text.x-fortran.CodeStyle.project.text-limit-width>132</org-netbeans-modules-editor-indent.text.x-fortran.CodeStyle.project.text-limit-width>
         <netbeans.compile.on.save>all</netbeans.compile.on.save>
-        <netbeans.hint.jdkPlatform>JDK_1.7</netbeans.hint.jdkPlatform>
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
     </properties>
 </project-shared-configuration>
diff --git a/src/main/java/com/intel/jndn/utils/client/impl/AdvancedClient.java b/src/main/java/com/intel/jndn/utils/client/impl/AdvancedClient.java
index d5d8c8e..be1e876 100644
--- a/src/main/java/com/intel/jndn/utils/client/impl/AdvancedClient.java
+++ b/src/main/java/com/intel/jndn/utils/client/impl/AdvancedClient.java
@@ -94,10 +94,10 @@
    */
   @Override
   public CompletableFuture<Data> getAsync(Face face, Interest interest) {
-    final CompletableFuture<Data> future = new CompletableFuture<>();
+    CompletableFuture<Data> future = new CompletableFuture<>();
 
     try {
-      final DataStream stream = getSegmentsAsync(face, interest);
+      DataStream stream = getSegmentsAsync(face, interest);
 
       stream.observe(new OnException() {
         public void onException(Exception exception) {
diff --git a/src/main/java/com/intel/jndn/utils/client/impl/DefaultStreamingClient.java b/src/main/java/com/intel/jndn/utils/client/impl/DefaultStreamingClient.java
index e40e4e7..55fa0f0 100644
--- a/src/main/java/com/intel/jndn/utils/client/impl/DefaultStreamingClient.java
+++ b/src/main/java/com/intel/jndn/utils/client/impl/DefaultStreamingClient.java
@@ -70,9 +70,9 @@
    * @return
    * @throws IOException
    */
-  public InputStream getStreamAsync(final DataStream onDataStream, OnException onException) throws IOException {
+  public InputStream getStreamAsync(DataStream onDataStream, OnException onException) throws IOException {
     PipedInputStream in = new PipedInputStream();
-    final PipedOutputStream out = new PipedOutputStream(in);
+    PipedOutputStream out = new PipedOutputStream(in);
 
     onDataStream.observe(onException);
 
diff --git a/src/main/java/com/intel/jndn/utils/client/impl/SegmentedDataStream.java b/src/main/java/com/intel/jndn/utils/client/impl/SegmentedDataStream.java
index 45200f3..41fd86a 100644
--- a/src/main/java/com/intel/jndn/utils/client/impl/SegmentedDataStream.java
+++ b/src/main/java/com/intel/jndn/utils/client/impl/SegmentedDataStream.java
@@ -16,16 +16,19 @@
 import com.intel.jndn.utils.client.OnComplete;
 import com.intel.jndn.utils.client.OnException;
 import com.intel.jndn.utils.client.DataStream;
-
-import java.util.*;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
-
-import net.named_data.jndn.*;
+import net.named_data.jndn.Data;
+import net.named_data.jndn.Interest;
+import net.named_data.jndn.Name;
+import net.named_data.jndn.OnData;
+import net.named_data.jndn.OnTimeout;
 import net.named_data.jndn.encoding.EncodingException;
-import net.named_data.jndn.sync.ChronoSync2013;
 
 /**
  * As packets are received, they are mapped by their last component's segment
@@ -46,10 +49,7 @@
   private volatile long current = -1;
   private volatile long end = Long.MAX_VALUE;
   private Map<Long, Data> packets = new HashMap<>();
-  private List<OnData> observersOnData = new ArrayList<>();
-  private List<OnComplete> observersOnComplete = new ArrayList<>();
-  private List<OnException> observersOnException = new ArrayList<>();
-  private List<OnTimeout> observersOnTimeout = new ArrayList<>();
+  private List<Object> observers = new ArrayList<>();
   private Exception exception;
 
   @Override
@@ -90,22 +90,22 @@
 
   @Override
   public void observe(OnData onData) {
-    observersOnData.add(onData);
+    observers.add(onData);
   }
 
   @Override
   public void observe(OnComplete onComplete) {
-    observersOnComplete.add(onComplete);
+    observers.add(onComplete);
   }
 
   @Override
   public void observe(OnException onException) {
-    observersOnException.add(onException);
+    observers.add(onException);
   }
 
   @Override
   public void observe(OnTimeout onTimeout) {
-    observersOnTimeout.add(onTimeout);
+    observers.add(onTimeout);
   }
 
   @Override
@@ -145,10 +145,10 @@
       do {
         current++;
         assert (packets.containsKey(current));
-        final Data retrieved = packets.get(current);
-        for (OnData cb : observersOnData) {
+        Data retrieved = packets.get(current);
+        observersOfType(OnData.class).stream().forEach((OnData cb) -> {
           cb.onData(interest, retrieved);
-        }
+        });
       } while (hasNextPacket());
     }
 
@@ -172,24 +172,28 @@
 
   @Override
   public synchronized void onComplete() {
-    for (OnComplete cb : observersOnComplete) {
+    observersOfType(OnComplete.class).stream().forEach((OnComplete cb) -> {
       cb.onComplete();
-    }
+    });
   }
 
   @Override
   public synchronized void onTimeout(Interest interest) {
-    for (OnTimeout cb : observersOnTimeout) {
+    observersOfType(OnTimeout.class).stream().forEach((OnTimeout cb) -> {
       cb.onTimeout(interest);
-    }
+    });
   }
 
   @Override
   public synchronized void onException(Exception exception) {
     this.exception = exception;
 
-    for (OnException cb : observersOnException) {
+    observersOfType(OnException.class).stream().forEach((OnException cb) -> {
       cb.onException(exception);
-    }
+    });
+  }
+
+  private <T> List<T> observersOfType(Class<T> type) {
+    return observers.stream().filter((Object o) -> type.isAssignableFrom(o.getClass())).map((o) -> (T) o).collect(Collectors.toList());
   }
 }
diff --git a/src/test/java/com/intel/jndn/utils/TestHelper.java b/src/test/java/com/intel/jndn/utils/TestHelper.java
index fbf931e..a73aba4 100644
--- a/src/test/java/com/intel/jndn/utils/TestHelper.java
+++ b/src/test/java/com/intel/jndn/utils/TestHelper.java
@@ -24,6 +24,8 @@
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import net.named_data.jndn.Data;
 import net.named_data.jndn.Face;
 import net.named_data.jndn.Name;
@@ -49,19 +51,15 @@
   }
 
   public static List<CompletableFuture<Data>> buildFutureSegments(Name name, int from, int to) {
-    List<CompletableFuture<Data>> list = new ArrayList<>();
-    for (Data d : buildSegments(name, from, to)) {
-      list.add(CompletableFuture.completedFuture(d));
-    }
-    return list;
+    return buildSegments(name, from, to).stream()
+            .map((d) -> CompletableFuture.completedFuture(d))
+            .collect(Collectors.toList());
   }
 
   public static List<Data> buildSegments(Name name, int from, int to) {
-    List<Data> list = new ArrayList<>();
-    for (Integer i = from; i < to; i++) {
-      list.add(buildData(new Name(name).appendSegment(i), i.toString(), to - 1));
-    }
-    return list;
+    return IntStream.range(from, to).boxed()
+            .map((i) -> buildData(new Name(name).appendSegment(i), i.toString(), to - 1))
+            .collect(Collectors.toList());
   }
 
   public static Data buildData(Name name, String content) {
diff --git a/src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java b/src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java
similarity index 92%
rename from src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java
rename to src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java
index 6710711..45572a7 100644
--- a/src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java
+++ b/src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientFileTestIT.java
@@ -18,7 +18,6 @@
 import com.intel.jndn.utils.server.impl.SegmentedServerHelper;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 import java.util.concurrent.CompletableFuture;
@@ -69,21 +68,14 @@
     long startTime = System.currentTimeMillis();
     AdvancedClient client = new AdvancedClient();
     List<CompletableFuture<Data>> requests = expressInterests(client, consumer, PREFIX, NUM_MESSAGES);
-    List<Data> datas = new ArrayList<>();
-    for (CompletableFuture<Data> f : requests) {
-      datas.add(TestHelper.retrieve(f));
-    }
+    List<Data> datas = requests.stream().map((f) -> TestHelper.retrieve(f)).collect(Collectors.toList());
     long endTime = System.currentTimeMillis();
 
     logger.info(String.format("Transfered %d bytes in %d ms", MESSAGE_SIZE_BYTES * NUM_MESSAGES, endTime - startTime));
   }
 
   private List<CompletableFuture<Data>> expressInterests(Client client, Face face, Name name, int count) {
-    List<CompletableFuture<Data>> list = new ArrayList<>();
-    for (int i = 0; i < count; i++) {
-      list.add(client.getAsync(face, name));
-    }
-    return list;
+    return IntStream.range(0, count).boxed().map((i) -> client.getAsync(face, name)).collect(Collectors.toList());
   }
 
   private class AdvancedDataServer implements OnInterestCallback {
diff --git a/src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java b/src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java
similarity index 92%
rename from src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java
rename to src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java
index e66daae..6a99599 100644
--- a/src/integration-test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java
+++ b/src/test/java/com/intel/jndn/utils/client/impl/AdvancedClientStressTestIT.java
@@ -18,7 +18,6 @@
 import com.intel.jndn.utils.server.impl.SegmentedServerHelper;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 import java.util.concurrent.CompletableFuture;
@@ -69,22 +68,14 @@
     long startTime = System.currentTimeMillis();
     AdvancedClient client = new AdvancedClient();
     List<CompletableFuture<Data>> requests = expressInterests(client, consumer, PREFIX, NUM_MESSAGES);
-
-    List<Data> datas = new ArrayList<>();
-    for (CompletableFuture<Data> f : requests) {
-      datas.add(TestHelper.retrieve(f));
-    }
+    List<Data> datas = requests.stream().map((f) -> TestHelper.retrieve(f)).collect(Collectors.toList());
     long endTime = System.currentTimeMillis();
 
     logger.info(String.format("Transfered %d bytes in %d ms", MESSAGE_SIZE_BYTES * NUM_MESSAGES, endTime - startTime));
   }
 
   private List<CompletableFuture<Data>> expressInterests(Client client, Face face, Name name, int count) {
-    List<CompletableFuture<Data>> list = new ArrayList<>();
-    for (int i = 0; i < count; i++) {
-      list.add(client.getAsync(face, name));
-    }
-    return list;
+    return IntStream.range(0, count).boxed().map((i) -> client.getAsync(face, name)).collect(Collectors.toList());
   }
 
   private class RandomDataServer implements OnInterestCallback {
diff --git a/src/test/java/com/intel/jndn/utils/client/impl/DefaultSegmentedClientTest.java b/src/test/java/com/intel/jndn/utils/client/impl/DefaultSegmentedClientTest.java
index 7ed72d4..2d65724 100644
--- a/src/test/java/com/intel/jndn/utils/client/impl/DefaultSegmentedClientTest.java
+++ b/src/test/java/com/intel/jndn/utils/client/impl/DefaultSegmentedClientTest.java
@@ -22,8 +22,6 @@
 import net.named_data.jndn.Interest;
 import net.named_data.jndn.Name;
 import static org.junit.Assert.assertEquals;
-
-import net.named_data.jndn.OnData;
 import org.junit.Test;
 
 /**
@@ -42,12 +40,9 @@
     Interest interest = new Interest(name);
     DataStream stream = instance.getSegmentsAsync(face, interest);
 
-    final TestCounter counter = new TestCounter();
-    stream.observe(new OnData() {
-      @Override
-      public void onData(Interest interest, Data data) {
-        counter.count++;
-      }
+    TestCounter counter = new TestCounter();
+    stream.observe((i, d) -> {
+      counter.count++;
     });
 
     for (Data segment : TestHelper.buildSegments(name, 0, 5)) {
@@ -82,12 +77,9 @@
     Interest interest = new Interest(name);
     DataStream stream = instance.getSegmentsAsync(face, interest);
 
-    final TestCounter counter = new TestCounter();
-    stream.observe(new OnData() {
-      @Override
-      public void onData(Interest interest, Data data) {
-        counter.count++;
-      }
+    TestCounter counter = new TestCounter();
+    stream.observe((i, d) -> {
+      counter.count++;
     });
 
     for (Data segment : TestHelper.buildSegments(name, 0, 5)) {
diff --git a/src/test/java/com/intel/jndn/utils/client/impl/SegmentedDataStreamTest.java b/src/test/java/com/intel/jndn/utils/client/impl/SegmentedDataStreamTest.java
index 9407cfc..2f165b9 100644
--- a/src/test/java/com/intel/jndn/utils/client/impl/SegmentedDataStreamTest.java
+++ b/src/test/java/com/intel/jndn/utils/client/impl/SegmentedDataStreamTest.java
@@ -20,7 +20,6 @@
 import net.named_data.jndn.Interest;
 import net.named_data.jndn.Name;
 import net.named_data.jndn.Name.Component;
-import net.named_data.jndn.OnData;
 import net.named_data.jndn.encoding.EncodingException;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -51,16 +50,13 @@
   public void testAddingUnorderedData() throws StreamException {
     Name name = new Name("/test/segmented/data/stream");
     Interest interest = new Interest(name);
-    final ArrayList<Long> segments = new ArrayList<>();
+    ArrayList<Long> segments = new ArrayList<>();
 
-    instance.observe(new OnData() {
-      @Override
-      public void onData(Interest i, Data d) {
-        try {
-          segments.add(d.getName().get(-1).toSegment());
-        } catch (EncodingException ex) {
-          throw new RuntimeException(ex);
-        }
+    instance.observe((i, d) -> {
+      try {
+        segments.add(d.getName().get(-1).toSegment());
+      } catch (EncodingException ex) {
+        throw new RuntimeException(ex);
       }
     });
 
@@ -103,10 +99,10 @@
   @Test
   public void testOrderedPackets() {
     int end = 10;
-    for (int i = 0; i < end; i++) {
+    IntStream.range(0, end).forEach((i) -> {
       addPacketToInstance(i);
       assertEquals(i, instance.current());
-    };
+    });
 
     assertEquals(end, instance.list().length);
   }
diff --git a/src/integration-test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java b/src/test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java
similarity index 90%
rename from src/integration-test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java
rename to src/test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java
index 7e53d77..f49525b 100644
--- a/src/integration-test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java
+++ b/src/test/java/com/intel/jndn/utils/client/impl/SimpleClientTestIT.java
@@ -16,14 +16,11 @@
 import com.intel.jndn.utils.client.impl.SimpleClient;
 import com.intel.jndn.utils.TestHelper;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.concurrent.CompletableFuture;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
-
-import com.intel.jndn.utils.processing.impl.CompressionStage;
 import net.named_data.jndn.Data;
 import net.named_data.jndn.Face;
 import net.named_data.jndn.Interest;
@@ -109,16 +106,12 @@
     Thread.sleep(500);
 
     // request all packets
-    ArrayList<CompletableFuture<Data>> futures = new ArrayList<>();
-    for (int i = 0; i < numInterests; i++) {
-      futures.add(instance.getAsync(consumerFace, PREFIX_RETRIEVE_MULTIPLE));
-    }
+    Stream<CompletableFuture<Data>> futures = IntStream.range(0, numInterests)
+            .boxed().map((i) -> instance.getAsync(consumerFace, PREFIX_RETRIEVE_MULTIPLE));
 
     // check all returned packets
-    for (CompletableFuture<Data> f : futures) {
-      Data d = TestHelper.retrieve(f);
-      assertEquals(servedData.getContent().toString(), d.getContent().toString());
-    }
+    futures.map((f) -> TestHelper.retrieve(f))
+            .forEach((d) -> assertEquals(servedData.getContent().toString(), d.getContent().toString()));
   }
 
   private class DataServer implements OnInterestCallback {
diff --git a/src/integration-test/java/com/intel/jndn/utils/server/impl/SegmentedServerTestIT.java b/src/test/java/com/intel/jndn/utils/server/impl/SegmentedServerTestIT.java
similarity index 100%
rename from src/integration-test/java/com/intel/jndn/utils/server/impl/SegmentedServerTestIT.java
rename to src/test/java/com/intel/jndn/utils/server/impl/SegmentedServerTestIT.java