繁体   English   中英

给定一个字符串列表,创建一个具有长度和字符串的哈希表

[英]Given a list of strings, create a hashmap with length and string

我试图理解一个编程问题,在该问题中,我得到了一个单词列表,例如(苹果,橘子,汽车,罐头,模糊),我将得到一个哈希图,其中包含键的长度和单词的链表的价值。 例如,

(3, {car, can})
(5, {apple, fuzzy})
(6, {orange})

我该如何构建? 我对Java比较陌生,只知道如何读取字符串输入并获取每个字符串的长度。 但是非常不熟悉哈希图。 有人可以指引我正确的方向吗?

正如Tim Biegeleisen所说,如果您正在使用Java 8,这是一种方法:

import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.*;

public class CollectByLength {
    public static void main(String[] args) {
        Map<Integer, List<String>> map = Stream.of("apple", "orange", "car", "can", "fuzzy")
                                        .collect(groupingBy(String::length));

        System.out.println(map); //prints {3=[car, can], 5=[apple, fuzzy], 6=[orange]}
    }
}

如果您出于某种原因关心List实现,则上述解决方案不能保证List实现。 从文档中:

不能保证返回的Map或List对象的类型,可变性,可序列化性或线程安全性。

但是也可以指定所需的List实现(此处为LinkedList

import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.*;

public class CollectByLength {
    public static void main(String[] args) {
        Map<Integer, List<String>> map = Stream.of("apple", "orange", "car", "can", "fuzzy")
                                        .collect(groupingBy(String::length, toCollection(LinkedList::new)));

        System.out.println(map); //prints {3=[car, can], 5=[apple, fuzzy], 6=[orange]}
    }
}

这是一种相当简洁的Java 7方法:

List<String> words = Arrays.asList("apple", "orange", "car", "can", "fuzzy");
Map<Integer, List<String>> map = new HashMap<>();

for (String word : words) {
    List<String> wordList = map.get(word.length());
    if (wordList == null) {
        wordList = new ArrayList<String>();
        wordList.add(word);
        map.put(word.length(), wordList);
    }
    else {
        wordList.add(word);
    }
}

我会留给专家来提供更精简的Java 8解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM