题目大意
磁盘的容量单位有M、G、T,其关系为 1T = 1000G、1G = 1000M,如样例所示先输入磁盘的个数,再依次输入磁盘的容量大小,然后按照从小到大的顺序对磁盘容量进行排序并输出。
例如:
输入:
3
20M
1T
300G
输出:
20M
300G
1T
本人思路:
本来准备使用TreeMap 进行key 排序,但是map key 有唯一性,如果输入两个一样大小的数据,会出现数据丢失的问题。
所以决定自定义一个对象VolumInfo 进行实现
然后用list 的stream.sorted 进行排序
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
public class Main3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 接受输入的数据
int size = Integer.parseInt(scan.nextLine());
// 接受input str 放入到原始list 里面
List<VolumInfo> volumInfos = new ArrayList<VolumInfo>();
for (int i = 0; i < size; i++) {
System.out.println("大小:");
VolumInfo volumInfo = new Main3().new VolumInfo();
// valueStr
String valueStr = scan.nextLine();
volumInfo.setValueStr(valueStr);
// value
double num = Double.parseDouble(valueStr.substring(0, valueStr.length()-1));
if(valueStr.contains("G")) {
num = num * 1000;
}else if(valueStr.contains("T")) {
num = num * 1000 * 1000;
}
volumInfo.setValue(num);
volumInfos.add(volumInfo);
}
// sorted
List<VolumInfo> sortedVolumInfos =
volumInfos.stream().sorted(Comparator.comparing(VolumInfo::getValue))
.collect(Collectors.toList());
// output
for(VolumInfo v: sortedVolumInfos) {
System.out.println(v.getValueStr());
}
}
class VolumInfo {
private double value;
private String valueStr;
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
public String getValueStr() {
return valueStr;
}
public void setValueStr(String valueStr) {
this.valueStr = valueStr;
}
}
}