当我使用流对价格值(具有 $ 符号)进行排序时,以下代码无法正常工作。我希望用 $ 符号对值进行排序。这些值未正确排序。
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> originalOrder = new ArrayList<>();
originalOrder.add("$15.994");
originalOrder.add("$7.99");
originalOrder.add("$49.99");
originalOrder.add("$15.99");
originalOrder.add("$9.99");
originalOrder.add("$29.99");
List<String> sortedList =
originalOrder.stream().sorted((o1, o2) -> o1.compareTo(o2)).collect(Collectors.toList());
System.out.println("Sorted list: " + sortedList);
}
}
出于排序目的,您可以删除字符串开头的
$
符号,并将其余部分解析为 double
,以便可以按数字方式对值进行排序:
List<String> sortedList =
originalOrder.stream()
.sorted(Comparator.comparingDouble
(s -> Double.parseDouble(s.substring(1))))
.collect(Collectors.toList());
旁注:在Java 16及以上版本中,您可以使用
.toList()
代替繁琐的.collect(Collectors.toList())
。