diff --git a/src/test/java/com/ossez/codebank/interview/tests/AmazonTest.java b/src/test/java/com/ossez/codebank/interview/tests/AmazonTest.java
new file mode 100644
index 0000000000..df2101b3ca
--- /dev/null
+++ b/src/test/java/com/ossez/codebank/interview/tests/AmazonTest.java
@@ -0,0 +1,210 @@
+package com.ossez.codebank.interview.tests;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Amazon
+ *
+ *
+ * https://www.cwiki.us/display/ITCLASSIFICATION/Flatten+Nested+Arrays
+ *
+ *
+ * @author YuCheng
+ *
+ */
+public class AmazonTest {
+
+ private final static Logger logger = LoggerFactory.getLogger(AmazonTest.class);
+
+ List returnList = new ArrayList();
+
+ /**
+ * https://www.cwiki.us/display/ITCLASSIFICATION/Flatten+Nested+Arrays
+ *
+ * FlattenNestedArrays
+ */
+ @Test
+ public void testFlattenNestedArrays() {
+ logger.debug("Test FlattenNestedArrays");
+ int numRows = 3;
+ int numColumns = 3;
+ List> area = new ArrayList>();
+ List a1 = new ArrayList();
+ List a2 = new ArrayList();
+ List a3 = new ArrayList();
+
+ a1.add(1);
+ a1.add(0);
+ a1.add(0);
+
+ a2.add(1);
+ a2.add(0);
+ a2.add(0);
+
+ a3.add(1);
+ a3.add(9);
+ a3.add(1);
+ area.add(a1);
+ area.add(a2);
+ area.add(a3);
+
+ int countD = 0;
+
+ int x = 0;
+ int y = 0;
+
+ for (int i = 0; i < area.size(); i++) {
+ boolean found9 = false;
+ y = 0;
+
+ List xList = area.get(i);
+ for (int j = 0; j < xList.size(); j++) {
+ if (xList.get(j) != 9) {
+ y++;
+ } else {
+ found9 = true;
+ break;
+ }
+
+ }
+
+ if (found9) {
+ break;
+ }
+
+ x++;
+
+ }
+
+ int carX = 0;
+ int carY = 0;
+
+ for (int k = 0; k < numRows * numRows; k++) {
+
+ String command = makeMove(carX, carY, numRows, numColumns, area);
+
+ if (command != null) {
+
+ if (command.equals("U")) {
+ carY = carY + 1;
+ }
+ if (command.equals("R")) {
+ carX = carX + 1;
+ }
+ if (command.equals("L")) {
+ carX = carX - 1;
+ }
+ if (command.equals("D")) {
+ carY = carY + 1;
+ }
+
+ countD = countD + 1;
+
+ if (carX == x && carY == y) {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+
+ System.out.println("---" + x + y);
+ System.out.println("--COUNT-" + countD );
+
+ }
+
+ /**
+ * Java 8 Stream to Flatten array.
+ *
+ * @param array
+ * @return
+ */
+ private static String makeMove(int carX, int carY, int numRows, int numColumns, List> area) {
+
+
+
+ if ((carX + 1 0 && area.get(carX + 1).get(carY) !=9 )
+ if (area.get(carX - 1).get(carY) == 1)
+ return "L";
+ else
+ return "F";
+
+ else if (carX > 0 && carY > 0 && area.get(carX - 1).get(carY - 1) == 1)
+ return "D";
+
+ return null;
+ }
+
+ /**
+ * Loop And Recursive
+ *
+ * @param inputArray
+ * @return
+ * @throws IllegalArgumentException
+ */
+ private List> nearestVegetarianRestaurant(int totalRestaurants, List> allLocations, int numRestaurants) {
+ // WRITE YOUR CODE HERE
+
+ List> ret = new ArrayList>();
+ HashMap> mp = new HashMap>();
+ Double[] keyArray = new Double[totalRestaurants];
+
+ int i = 0;
+ for (List al : allLocations) {
+ Double dis = getDis(al.get(0), al.get(1));
+ mp.put(dis, al);
+ keyArray[i] = dis;
+
+ i++;
+ }
+
+ Arrays.sort(keyArray);
+ for (int j = 0; j < numRestaurants; j++) {
+ ret.add(mp.get(keyArray[j]));
+ }
+
+ return null;
+ }
+
+ private Double getDis(int a, int b) {
+ // WRITE YOUR CODE HERE
+
+ return Math.sqrt(a * a + b * b);
+
+ }
+
+ /**
+ * Java 8 Stream to Flatten array.
+ *
+ * @param array
+ * @return
+ */
+ private static Stream