マッチした場合は、ArrayListにArrayList_Bの要素を追加していない場合は、その後、ArrayListにArrayList_Aの要素を追加

kyrie3:

私は、次のコードを持っています:

package sportsCardsTracker;

import java.io.*;
import java.text.*;
import java.util.*;
import java.util.stream.Collectors;

public class Test_Mark6 {
    public static ArrayList<String> listingNameList;
    public static ArrayList<String> finalNamesList;
    public static void main(String[] args) throws IOException, ParseException {
        listingNameList = new ArrayList();
        listingNameList.add("LeBron James 2017-18 Hoops Card");
        listingNameList.add("Stephen Curry Auto Patch, HOT INVESTMENTS!");
        listingNameList.add("Michael Jordan 1998 Jersey Worn Card");

        ArrayList<String> playersNamesList = new ArrayList();
        playersNamesList.add("LeBron James");
        playersNamesList.add("Stephen Curry");
        playersNamesList.add("Michael Jordan");

        finalNamesList = new ArrayList();

        String directory = System.getProperty("user.dir");
        File file = new File(directory + "/src/sportsCardsTracker/CardPrices.csv");
        FileWriter fw = new FileWriter(file, false); //true to not over ride 

        for (int i = 0; i < listingNameList.size(); i++) {
            for (String listingNames : listingNameList) {
                List<String> result = NBARostersScraper_Mark3.getNBARoster().stream().map(String::toLowerCase).collect(Collectors.toList());
                boolean valueContained = result.stream().anyMatch(s -> listingNames.toLowerCase().matches(".*" + s + ".*"));
                if(valueContained == true) {
                    finalNamesList.add(//The players' name);
                }
            }
            fw.write(String.format("%s, %s\n", finalNamesList.get(i)));
            }

    }
    }

基本的に、listingsNameList私は、リストの名前を持っている中でplayersNamesList、私はすべての選手の名前を持っています。コードは、2つのArrayListの間で名前が一致し、唯一のプレーヤーの名前、それべきリターンの選手を見つけたら私が希望することは、ということです。

たとえば、代わりに"LeBron James 2017-18 Hoops Card"それを返す必要があります"Lebron James"のみ。それが何かを見つけるしない場合は、単にリストの名前を返します。これまでのところ、私はつまり新しいのArrayListを作成してfinalNamesList、私の考えは使用されるだろうif(に名前一致が見つかった場合、その後の選手を追加文をfinalNamesListに名前リストを追加しない場合は、」finalNamesList)。しかし、上記のコードは動作していない、それだけですべての名前を追加してlistingNameListしますfinalNamesList私は、インデックスをつかむ方法が間違っていると思われる-しかし、私はそれを修正する方法がわかりません。

マック:

あなたは間違っているようだパターンに一致するために使用している方法。代わりに「一致()」のあなたは、文字列を使用することができ、以下のような方法が含まれています。

List<String> temp = new ArrayList<>();
for (String listingNames : listingNameList) {
    temp = playersNamesList.parallelStream().filter(s -> listingNames.toLowerCase().contains(s.toLowerCase())).map(s -> s).collect(Collectors.toList()); 
    if(temp.size() > 0){
        System.out.println(temp.get(0));
        //fw.write(String.format("%s, %s\n", temp.get(0));
    }
}

もう一つは、あなたは一つのループで、あなたの出力を達成することができ、ここではループのための2を使用する必要はありません。あなたはまだ、このコードを最適化することができますが、私はあなたが避けることができることは、上記の一時リストをとっています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=300737&siteId=1