# Fetch Items To Display ###### tags: `Implementation`, `Amazon OA` Description: Amazon website contains one to many items in each page. To mimic the logic of the website, an Amazon programmer has a list of items and each item has its name, relevance and price. After sorting the items by `[name:0, relevance:1, price:2]`, the programmer is trying to find out a list of items displayed in a chosen page. Given a list of items, the `sort parameter`, the `sort order = (0: ascending, 1:descending)`, the number of items to be displayed in each page and a page number, write an algorithm to *determine the list of item names in the specified page while respecting the item's order*. Page Number starts from 0. * **Example** ``` numOfItems = 3 items: ["item1",10,15],["item2",3,4],["item3",17,8] sortParameter: 1 sortOrder: 0 itemsPerPage: 2 pageNumber: 1 Output: {"item3"} ``` Solution: ```java= public class WebsiteItemSorting { class DisplayItem { String name; int relevance; int price; public DisplayItem(String name, int relevance, int price) { this.name = name; this.relevance = relevance; this.price = price; } } public List<String> WebsiteItemSorting(int numOfItems, Map<String, int[]> items, int sortParameter, int sortOrder, int itemPerPage, int pageNumber) { List<DisplayItem> list = new ArrayList<>(); for (String key : items.keySet()) { int[] info = items.get(key); list.add(new DisplayItem(key, info[0], info[1])); } Collections.sort(list, getComp(sortOrder, sortParameter)); List<String> res = new ArrayList<>(); for (int i = pageNumber * itemPerPage; i < pageNumber * (itemPerPage + 1) && i < numOfItems; i++) { res.add(list.get(i).name); } return res; } private Comparator<DisplayItem> getComp(int sortOrder, int sortParameter) { Comparator<DisplayItem> comparator = new Comparator<DisplayItem>() { @Override public int compare(DisplayItem o1, DisplayItem o2) { int res = 0; switch (sortParameter) { case 0: res = o1.name.compareTo(o2.name); break; case 1: res = o1.relevance - o2.relevance; break; case 2: res = o1.price - o2.price; break; } return sortOrder == 1 ? -res : res; } }; return comparator; } } ```