Câu hỏi Chuyển đổi giá trị được phân cách bằng dấu phẩy thành danh sách


Giả sử tôi có một tập hợp các con số như 1,2,3,4,5,6,7 đầu vào như một đĩa đơn String. Tôi muốn chuyển đổi những con số đó thành List của Long đối tượng tức là List<Long>.

Bất cứ ai có thể giới thiệu phương pháp dễ nhất?


15
2018-06-15 14:00


gốc




Các câu trả lời:


Tôi sẽ sử dụng thư viện ổi của google tuyệt vời để làm điều đó. String.split có thể gây ra nhiều rắc rối.

String numbers="1,2,3,4,5,6,7";
Iterable<String> splitIterator = Splitter.on(',').split(numbers);
List<String> list= Lists.newArrayList(splitIterator );

-10
2018-06-15 14:09



Cảm ơn và nó đã hoạt động. - Kathir
nó giải quyết vấn đề như thế nào? danh sách <Long> ở đâu? - Swamy
Không sử dụng Java tiêu chuẩn (do đó không phải là phương pháp dễ nhất), không giải quyết được vấn đề. - Alessandro Alessandra
Tôi không hiểu câu trả lời cho câu trả lời hay nhất ... - jabujavi
Hoặc câu trả lời này không đúng hoặc câu hỏi @Kathir không đúng. - Aebsubis


Bạn có nghĩa là một cái gì đó như thế này?

String numbers = "1,2,3,4,5,6,7";

List<Long> list = new ArrayList<Long>();
for (String s : numbers.split(","))
    list.add(Long.parseLong(s));

System.out.println(list);

Vì Java 8 bạn có thể viết lại nó như

List<Long> list = Stream.of(numbers.split(","))
        .map(Long::parseLong)
        .collect(Collectors.toList());

Ít phiên bản ngắn hơn nếu bạn muốn List<String>

List<String> fixedSizeList = Arrays.asList(numbers.split(","));
List<String> rezisableList = new ArrayList<>(fixedSizeList);

hoặc trên máy bay

List<String> list = new ArrayList<>(Arrays.asList(numbers.split(",")));

47
2018-06-15 14:03



Có, bạn đúng ... mọi cách đơn giản khác ... - Kathir


Giải pháp đơn giản và tiện dụng sử dụng  (để hoàn thành chủ đề):

String str = "1,2,3,4,5,6,7";
List<Long> list = Arrays.stream(str.split(",")).map(Long::parseLong).collect(Collectors.toList());
System.out.println(list);

[1, 2, 3, 4, 5, 6, 7]

Thậm chí tốt hơn, sử dụng Pattern.splitAsStream():

Pattern.compile(",").splitAsStream(str).map(Long::parseLong).collect(Collectors‌​.toList());

4
2017-12-16 11:15





String input = "1,2,3,4,5,6,7";
String[] numbers = input.split("\\,");
List<Integer> result = new ArrayList<Integer>();
for(String number : numbers) {
    try {
        result.add(Integer.parseInt(number.trim()));
    } catch(Exception e) {
        // log about conversion error
    }
}

3
2018-06-15 14:11



Có phương pháp tiện ích nào có sẵn trong java hoặc apache commons hay bất kỳ phương thức nào khác để nhận kết quả theo cách đơn giản bằng cách gọi một phương thức? - Kathir
Bạn có thể sử dụng một số bộ sưu tập appache hoặc dung nham dựa trên mô hình khách truy cập để chuyển đổi chuỗi thành số nguyên, nhưng nó sẽ không làm cho mã đơn giản. Nó sẽ làm cho nó khó đọc hơn. - alexey28
văn bản đã được chỉnh sửa, ông yêu cầu một danh sách đối tượng không phải là một danh sách dài ... - jocelyn


Bạn có thể dùng String.split() và Long.valueOf():

String numbers = "1,2,3,4,5,6,7";
List<Long> list = new ArrayList<Long>();
for (String s : numbers.split(","))
    list.add(Long.valueOf(s));

System.out.println(list);

2
2017-10-28 00:02





Nếu bạn không sử dụng java8 và không muốn sử dụng vòng lặp thì bạn có thể sử dụng Trái ổi

List<Long> longValues = Lists.transform(Arrays.asList(numbersArray.split(",")), new Function<String, Long>() {
                @Override
                public Long apply(String input) {
                    return Long.parseLong(input.trim());
                }
            });

Như những người khác đã đề cập cho Java8, bạn có thể sử dụng Streams.

        List<Long> numbers = Arrays.asList(numbersArray.split(","))
                              .stream()
                              .map(String::trim)
                              .map(Long::parseLong)
                              .collect(Collectors.toList());;

1
2018-04-28 07:25



Thay vì Arrays.asList(numbersArray.split(",")).stream(), đơn giản Arrays.stream(numbersArray.split(",")) hoặc là Stream.of(numbersArray.split(",")) có thể được sử dụng. - Utku Özdemir
@ UtkuÖzdemir thực sự không thể. Trong trường hợp đó Lists.transform không thể được sử dụng để chuyển đổi String thành Long. - Bandi Kishore
Tôi có nghĩa là giải pháp java8, không phải là ổi. - Utku Özdemir