# 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;
}
}
```