2016-03-20 13 views
1

たとえば、["ab", "#SomeHash", "qwlerkj", "[email protected]#[email protected]", "sdfs", "#anotherhash"]["#SomeHash", "#anotherhash"]、または["#SomeHash", "#anotherhash"]を含むArrayListです。ランダムな単語の配列をハッシュタグの配列にフィルタリングする方法は?

私はlambda4jを使ってみましたが、空のリストを与え続けています。

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

Java 7を使用しているため、Java 8の機能を使用できません。 私を助けてください。

+4

なぜ単純なループを使用しないのですか?すべての要素を繰り返し処理し、ハッシュ条件でそれらをテストします。要素がテストに合格する場合は、新しい結果リストに追加します。 'List hashtagWords = new ArrayList <>(); for(String s:statusText.split( "")){if(s.startsWith( "#"))hashtagWords.add(s); } ' – Pshemo

+0

元の文字列で正規表現を実行することもできます。 – segFault

+0

@Pshemo私は人々にこのコードを示す必要があるので、私はそれを空想的な方法でやりたいと思います。 – user2418202

答えて

1

おそらく古い学校が、

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

    list.add("ab"); 
    list.add("#SomeHash"); 
    list.add("qwlerkj"); 
    list.add("[email protected]#[email protected]"); 
    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ジョブがEDIT

文字列

ハッシュが含まれていない:Lambda4jHamcrest Matcherを使用して

は、反復ずに1行で行うことができます。

List<String> hashWordsList = filter(startsWith("#"), 
asList("ab","#SomeHash","qwlerkj","[email protected]#[email protected]","sdfs","#anotherhash")); 
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()); 
関連する問題