如何将随机字数组过滤到一个主题标签数组?

时间:2016-03-20 01:27:02

标签: java lambda

例如,["ab", "#SomeHash", "qwlerkj", "!@#!@", "sdfs", "#anotherhash"]["#SomeHash", "#anotherhash"]或包含["#SomeHash", "#anotherhash"]的ArrayList。

我尝试使用lambda4j,它不断给我一个空列表。

List<String> hashtagWords = select(statusText.split(" "), hasItemInArray(startsWith("#")));

我使用的是Java 7,所以我不能使用Java 8功能。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

可能是老学校,但是做了工作

    List<String> list  = new ArrayList<String>();
    List<String> hashTagList  = new ArrayList<String>();

    list.add("ab");
    list.add("#SomeHash");
    list.add("qwlerkj");
    list.add("!@#!@");
    list.add("sdfs");
    list.add("#anotherhash");
    Iterator<String> listItr = list.iterator();
    while (listItr.hasNext()){
        String element =  listItr.next();
        if(element.startsWith("#")){
            hashList.add(element);
        }
    }

hasTagList包含哈希字符串

修改

使用Lambda4jHamcrest Matcher可以在没有迭代的情况下以单行完成。

List<String> hashWordsList = filter(startsWith("#"), 
asList("ab","#SomeHash","qwlerkj","!@#!@","sdfs","#anotherhash"));

答案 1 :(得分:0)

你在标题中说你有一系列随机单词,但你的代码示例看起来好像有StringstatusText)。我将在这里假设你已经拥有一个阵列。 (您可以使用String.split()或任何您需要的东西来获取它。)

在Java 7中,您可以这样做:

List<String> hashTagWords = new ArrayList<>();
for (String word : statusWords) {
    if (word.startsWith("#")) {
        hashTagWords.add(word);
    }
}
return hashTagWords;

一旦你进入Java 8,这应该可以解决问题:

return Arrays.stream(statusWords)
    .filter(word -> word.startsWith("#"))
    .collect(Collectors.toList());