如何对包含$符号的价格值进行排序[重复]

问题描述 投票:0回答:1

当我使用流对价格值(具有 $ 符号)进行排序时,以下代码无法正常工作。我希望用 $ 符号对值进行排序。这些值未正确排序。

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);
    }
}
java sorting java-stream
1个回答
4
投票

出于排序目的,您可以删除字符串开头的

$
符号,并将其余部分解析为
double
,以便可以按数字方式对值进行排序:

List<String> sortedList =
    originalOrder.stream()
                 .sorted(Comparator.comparingDouble
                         (s -> Double.parseDouble(s.substring(1))))
                 .collect(Collectors.toList());

旁注:在Java 16及以上版本中,您可以使用

.toList()
代替繁琐的
.collect(Collectors.toList())

我保留了OP的风格来关注所提出的问题,但我认为我也应该指出这一点。

© www.soinside.com 2019 - 2024. All rights reserved.