转载

java小白的成长记录之数据排序

在工作中已经开始跌跌撞撞的java搬砖了,第一个java项目正在上手中,随时记录一下碰到的问题吧

本次遇到的问题是:根据某个属性对数据进行排序,简单举例:所有学生考了4门,使用其中一门考试成绩进行排序。

用php来说呢,就是二维数组的排序,实现方式就是array_column把指定key全取出来,然后使用array_multisort进行排序。

那么java里应该怎么实现呢?

二、JSONObject能排序么

目前程序中多用的JSONObject这种数据格式,那么是否可以直接排序,答案是不能的。原因呢,JSONObject内部是使用hashmap进行存储的,是无序的。

三、实现思路

首先要先转化为List集合,然后重写下Comparator比较器的,从而实现想要的排序规则。

四、代码

首先定义了个对象Stock.java

package com.example.demo.controller;

public class Stock {
    private float price;
    private String stock;
    private float profit;

    public Stock() {
    }

    public Stock(float price, String stock, float profit) {
        this.price = price;
        this.stock = stock;
        this.profit = profit;
    }

    public String getStock() {
        return stock;
    }

    public void setStock(String stock) {
        this.stock = stock;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public float getProfit() {
        return profit;
    }

    public void setProfit(float profit) {
        this.profit = profit;
    }
}
复制代码

排序部分,先插入示例数据,转为集合,然后根据其中profit的字段进行排序

JSONArray stockList = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("price", 20);
        item.put("profit", 3);
        item.put("stock", "300003");

        stockList.add(0, item);
        JSONObject item1 = new JSONObject();
        item1.put("price", 30);
        item1.put("profit", 4);
        item1.put("stock", "300002");

        stockList.add(1, item1);
        JSONObject item2 = new JSONObject();
        item2.put("price", 10);
        item2.put("profit", 4);
        item2.put("stock", "300004");
        stockList.add(2, item2);

        JSONObject item3 = new JSONObject();
        item3.put("price", 20);
        item3.put("profit", 6);
        item3.put("stock", "300005");
        stockList.add(3, item3);

         List<Stock> stockDataList = JSONObject.parseArray(stockList.toJSONString(), Stock.class);

        Collections.sort(stockDataList, new Comparator<Stock>() {
            public int compare(Stock o1, Stock o2) {
                double i1 = 0;
                double i2 = 0;
                i1 = o1.getProfit();
                i2 = o2.getProfit();
                if (i1 < i2) {
                    return 1;
                }
                if (i1 == i2) {
                    return 0;
                }
                return -1;
            }
        });

复制代码

结果:可以看到数据已经根据profit进行排序了

java小白的成长记录之数据排序

五、调试方法

之前写php的时候常用的调试就是var_dump();+exit();,那么在java中应该怎么进行调试呢?

先在右上角找到Debug 的按钮,把程序启动起来,在需要调试的位置的行数旁边点一下,就可以了。

java小白的成长记录之数据排序

六、后记

虽然排序看起来比较简单,正所谓会者不难,慢慢在实践中将每个小的问题都解决,这就是java小白的成长吧~

原文  https://juejin.im/post/5eeefb9651882565d74fb4c2
正文到此结束
Loading...