Java:无法使用Java Streams对ArrayList进行筛选

huangapple go评论155阅读模式
英文:

Java: Cannot filter ArrayList using Java-Streams

问题

以下是翻译好的内容:

我遇到的错误

我得到了错误信息:“在类型Stream中,方法map(Function<? super Car, ? extends R>)不适用于参数”

我想要做的事情

我试图筛选“xx ArrayList”,但我一直收到这个错误,我不知道为什么。我对Java不太熟悉,所以这可能是我犯的错误。

这是我的代码

  1. import java.util.HashMap;
  2. import java.util.ArrayList;
  3. import java.util.stream.*;
  4. import java.util.Arrays;
  5. public class BusCar
  6. {
  7. // 时间表
  8. String time;
  9. int platform;
  10. ArrayList<Car> xx = new ArrayList<Car>();
  11. String newline = System.getProperty("line.separator");
  12. public BusCar(String depTime, int plat)
  13. {
  14. // 初始化实例变量
  15. time = depTime;
  16. platform = plat;
  17. }
  18. // 文件名,一个包含火车记录的CSV文件。
  19. public void addFromFile(String filename)
  20. {
  21. TrainReader reader = new TrainReader();
  22. xx.addAll(reader.getTrains(filename));
  23. }
  24. public void printBefore(String time)
  25. {
  26. // 打印在给定时间之前出发的所有火车
  27. // 每行一个火车
  28. xx.stream().filter(i -> Integer.parseInt(i.departureTime) < Integer.parseInt(time)).forEach(i -> System.out.println(i + newline));
  29. }
  30. }

请注意,我已经进行了必要的修正,使代码在翻译后保持正确的语法和结构。

英文:

The error I am getting

I am getting the error &quot;The method map(Function&lt;? super Car,? extends R&gt;) in the type Stream&lt;Car&gt; is not applicable for the arguments

What I am trying to do

I am trying to filter the xx ArrayList but I keep getting this error and I don not or cannot tell why. I am new to Java so this is probably an error I have made

This is my code

  1. import java.util.HashMap;
  2. import java.util.ArrayList;
  3. import java.util.stream.*;
  4. import java.util.Arrays;
  5. public class BusCar
  6. {
  7. // timetable
  8. String time;
  9. int platform;
  10. ArrayList&lt;Car&gt; xx = new ArrayList&lt;Car&gt;();
  11. String newline = System.getProperty(&quot;line.separator&quot;);
  12. public BusCar(String depTime, int plat)
  13. {
  14. // initialise instance variables
  15. depTime = time;
  16. plat = platform;
  17. }
  18. //filename A CSV file of Train records.
  19. public void addFromFile(String filename)
  20. {
  21. TrainReader reader = new TrainReader();
  22. xx.addAll(reader.getTrains(filename));
  23. }
  24. public void printBefore(String time)
  25. {
  26. // prints all trains which depart before the given time
  27. // one train per line
  28. xx.stream().filter(i -&gt; Integer.parseInt(i.departureTime) &lt; Integer.parseInt(time)).map(i-&gt; System.out.println(i),newline);
  29. }
  30. }

答案1

得分: 1

看起来您想要这样做。您的Car类需要适当地覆盖toString()方法:

  1. xx.stream().filter(i -> Integer.parseInt(i.departureTime) <
  2. Integer.parseInt(time)).forEach(System.out::println);
英文:

It appears you want to do this. Your Car class needs to properly override toString()

  1. xx.stream().filter(i -&gt; Integer.parseInt(i.departureTime) &lt;
  2. Integer.parseInt(time)).forEach(System.out::println);
  3. </details>

huangapple
  • 本文由 发表于 2020年10月21日 19:00:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/64462133.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定