First create a Product model class that implements Comparator interface so allows you to sort ProductList, in this case by marketId.
Product.java
public class Product implements Comparator<Product> {
public String productId;
public String selection;
public String sales;
public String marketId;
public Product() {
super();
}
@Override
public int compare(final Product p1, final Product p2) {
if (!TextUtils.isEmpty(p1.marketId) && !TextUtils.isEmpty(p2.marketId)) {
return p1.marketId.compareTo(p2.marketId); //Ascending order
}
return 0;
}
}
Second, create a Product parser class that parses your product list JSONArray to Product type list and from Product type list to grouped Product JSONArray.
ProductParser.java
public class ProductParser {
private static final String TAG = ProductParser.class.getSimpleName();
private static final String PRODUCT_ID = "product_id";
private static final String SELECTION = "selection";
private static final String SALES = "sales";
private static final String MARKET_ID = "market_id";
private static final String HELPER_ID = "-1";
public ProductParser() {
super();
}
public List<Product> parseProductArrayToProductList(final JSONArray productArray) {
final List<Product> productsList = new ArrayList<>();
if (null != productArray) {
try {
final int productCount = productArray.length();
for (int i = 0; i < productCount; ++i) {
final JSONObject productJson = productArray.getJSONObject(i);
final Product product = new Product();
product.productId = productJson.getString(PRODUCT_ID);
product.selection = productJson.getString(SELECTION);
product.sales = productJson.getString(SALES);
product.marketId = productJson.getString(MARKET_ID);
productsList.add(product);
}
} catch (final JSONException e) {
Log.e(TAG, e.toString());
}
}
return productsList;
}
public JSONArray parseProductListToGroupedProductArray(final List<Product> productList) {
final JSONArray groupedProductArray = new JSONArray();
if (null != productList && !productList.isEmpty()) {
final int productCount = productList.size();
String currentMarketId = HELPER_ID;
JSONArray productArray = null;
for (int i = 0; i < productCount; ++i) {
final Product product = productList.get(i);
if (null != product) {
if (!currentMarketId.equals(product.marketId)) {
currentMarketId = product.marketId;
if (null != productArray) {
groupedProductArray.put(productArray);
}
productArray = new JSONArray();
}
try {
final JSONObject productObject = new JSONObject();
productObject.put(PRODUCT_ID, product.productId);
productObject.put(SELECTION, product.selection);
productObject.put(SALES, product.sales);
productObject.put(MARKET_ID, product.marketId);
productArray.put(productObject);
} catch (final JSONException e) {
Log.e(TAG, e.toString());
}
}
}
if (null != productArray) {
groupedProductArray.put(productArray);
}
}
return groupedProductArray;
}
}
Finally, in your activity or wherever you need to implement this feature, use provided clases.
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String data = "\r\n\r\n[\r\n {\r\n \"product_id\": \"12301\",\r\n \"selection\": \"No\",\r\n \"sales\": \"31\",\r\n \"market_id\": \"10\"\r\n },\r\n {\r\n \"product_id\": \"12302\",\r\n \"selection\": \"No\",\r\n \"sales\": \"24\",\r\n \"market_id\": \"43\"\r\n },\r\n {\r\n \"product_id\": \"12303\",\r\n \"selection\": \"Yes\",\r\n \"sales\": \"121\",\r\n \"market_id\": \"10\"\r\n },\r\n {\r\n \"product_id\": \"12304\",\r\n \"selection\": \"No\",\r\n \"sales\": \"0\",\r\n \"market_id\": \"43\"\r\n },\r\n {\r\n \"product_id\": \"12305\",\r\n \"selection\": \"Yes\",\r\n \"sales\": \"20\",\r\n \"market_id\": \"43\"\r\n }\r\n]\r\n\r\n";
final List<Product> productList = getProductList(data);
Collections.sort(productList, new Product());
final JSONArray sortedProductArray = getProductArray(productList);
Log.e(TAG, sortedProductArray.toString()); // Here you have!
}
private List<Product> getProductList(final String data) {
List<Product> productList = new ArrayList<>();
try {
final JSONArray productArray = new JSONArray(data);
final ProductParser parser = new ProductParser();
productList = parser.parseProductArrayToProductList(productArray);
} catch (final JSONException e) {
Log.e(TAG, e.toString());
}
return productList;
}
private JSONArray getProductArray(final List<Product> productList) {
final ProductParser parser = new ProductParser();
return parser.parseProductListToGroupedProductArray(productList);
}
}