gpt4 book ai didi

java - 如何对两个 ArrayList 进行排序并将它们放入 Map 中?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:12 24 4
gpt4 key购买 nike

我的程序计算输入到文本文件中的所有值的数字总和。输入的值及其相应的数字总和存储在两个单独的 ArrayList 中。

最后两个ArrayList组合成一个LinkedHashMap,按照数字和降序排列。如果您输入具有相同数字总和的多个值,则应该按它们的原始值降序排列这些(并且只有那些),而不是这次数字总和(其余与以前相同)。

我如何使用比较器实现这一点?

我的列表和 map :

String filePath = args[0];

LineNumberReader br = new LineNumberReader(new FileReader(filePath));
LinkedHashMap<BigInteger, BigInteger> unsortedMap = new LinkedHashMap<BigInteger, BigInteger>();
List<BigInteger> inputList = new ArrayList<>();
List<BigInteger> DSList = new ArrayList<>();

if(br.ready()){
while (true) {
String line = br.readLine();
if (line == null) {
break;
}

BigInteger input = new BigInteger(line);
inputList.add(input);
DSList.add(methods.digitSum(input));

}
}

for(int i = 0; i < inputList.size(); i++){
unsortedMap.put(inputList.get(i), DSList.get(i));
}

for(BigInteger key : unsortedMap.keySet()){
System.out.println(new BigDecimal(key).toPlainString() + " (Digit Sum: " + unsortedMap.get(key) + (")"));
}

方法.digitSum:

public static BigInteger digitSum(BigInteger number) {

String digits = number.toString();
int sum = 0;

for(int i = 0; i < digits.length(); i++) {
int digit = (int) (digits.charAt(i) - '0');
sum = sum + digit;
}

return BigInteger.valueOf(sum);

}

输出必须如下所示:

x(数字总和:y)
x(数字总和:y)
...
x = 输入的值
y = x 的数字总和

如果您需要任何进一步的信息,请随时询问。

最佳答案

这是一个带有简单类和比较器的解决方案

class Values {
BigInteger number;
BigInteger digitSum;

Values(BigInteger number, BigInteger sum) {
this.number = number;
this.digitSum = sum;
}

@Override
public String toString() {
return number + " (digit sun:" + digitSum + ")";
}
}

然后用这个类创建一个列表

 List<Values> inputList = new ArrayList<>();

并在读取文件时使用构造函数将Values对象添加到列表中

为了排序,你可以像这样创建一个 Comparator 对象

Comparator<Values> compareSum = (Values v1, Values v2) -> {
int result = v1.digitSum.compareTo(v2.digitSum);
return result != 0 ? result : v1.number.compareTo(v2.number);
};

并按降序对列表进行排序

inputList.sort(compareSum.reversed());

关于java - 如何对两个 ArrayList 进行排序并将它们放入 Map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com