コンマ区切り入力の平均使用してJavaの上にある特定の列の値を持つ行が、私はいくつかのファイルがどのようにファイル
TIMESTAMP,COUNTRYCODE,RESPONSETIME
1544190995,US,500
1723922044,GB,370
1711557214,US,750
どのようにすることによって行をフィルタリングすることができ、以下のようにコンマ区切り形式でいくつかのデータを持っていると仮定フィルタリングすることができRESPONSETIMEは平均を上回っていますか?つまり、RESPONSETIMEの平均は526です。したがって、526より大きいRESPONSETIMEを持つすべての行を表示する必要があります。データラインは特定の順序であることが保証されていません。 RESPONSETIMEが平均を上回っています)?
現在、私は以下のように平均を求めています。同じ方法でフィルタを適用してコレクションとして返すことはできますか?私の理解によれば、同じ方法でファイルを2回読むことはできません。
public static Collection<?> filterByResponseTimeAboveAverage(Reader source) {
BufferedReader br = new BufferedReader(source);
String line = null;
Collection<String> additionalList = new ArrayList<String>();
int iteration = 0;
String[] myArray = null;
long count=0;
long responseTime=0;
long sum=0;
int numOfResponseTime=0;
long average=0;
List<String> myList = new ArrayList<String>();
try
{
while ((line = br.readLine()) != null) {
System.out.println("Inside while");
if (iteration == 0) {
iteration++;
continue;
}
myArray = line.split(",");
for (String eachval:myArray)
{
boolean isNumeric = eachval.chars().allMatch(x -> Character.isDigit(x));
//since input dataline is not guaranted to be in any particular order I am finding RESPONSETIME like this
if (isNumeric)
{
count=eachval.chars().count();
if (count<10)
{
responseTime=Integer.parseInt(eachval);
sum=sum+responseTime;
numOfResponseTime++;
}
}
myList.add(eachval);
}
}
average=sum/numOfResponseTime;
System.out.println("Average -- "+average);
---------------
---------------
}