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を使用する必要はありません。あなたはまだ、このコードを最適化することができますが、私はあなたが避けることができることは、上記の一時リストをとっています。