RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1438980
Accepted
gexter
gexter
Asked:2022-08-13 18:45:22 +0000 UTC2022-08-13 18:45:22 +0000 UTC 2022-08-13 18:45:22 +0000 UTC

如何摆脱枚举类?

  • 772
public class ReportBuilder {
private final DataParser parser = new DataParser();
private final DataReader reader = new DataReader();
private List<ReportRecord> recordList;

enum EndOrStart {
    END, START
}

public List<String> prepareReport(String startFile, String endFile, String abbrevFile) {
    formatChart(abbrevFile);
    addTime(startFile, EndOrStart.START);
    addTime(endFile, EndOrStart.END);
    recordList.forEach(rec -> rec.setTimeDiff(rec.getEndTime().toNanoOfDay()-rec.getStartTime().toNanoOfDay()));
    sortByDiffTime();
    return collectReport();

}

private Stream<String> recordToString(int index) {
    String timeFormat = "m:ss.SSS";
    String reportFormat = "%d. %s | %s | %s";
    String delimiter = "-".repeat(60);
    ReportRecord dataRecord = recordList.get(index);
    String name = dataRecord.getName();
    String team = dataRecord.getTeam();
    String time = LocalTime.ofNanoOfDay(dataRecord.getTimeDiff()).format(DateTimeFormatter.ofPattern(timeFormat));
    String result = String.format(reportFormat, 1 + index, name, team, time);
    return (1 + index) % 15 == 0
            ? Stream.of(result, delimiter)
            : Stream.of(result);
}

private ArrayList<String> collectReport() {
    return IntStream.range(0, recordList.size())
            .mapToObj(this::recordToString)
            .flatMap(s -> s)
            .collect(Collectors.toCollection(ArrayList::new));
}

private void formatChart(String abbrevFile) {
    List<String> abbrevList = reader.readFile(abbrevFile);
    recordList = new ArrayList<>(abbrevList.size());
    abbrevList.stream().sorted(Comparator.naturalOrder())
            .forEach(line -> recordList.add(parser.parseRacer(line)));
}

private void addTime(String timeFile, EndOrStart startOrEndFile) {
    List<String> timeStringList = reader.readFile(timeFile);
    timeStringList.sort(Comparator.naturalOrder());
    List<LocalTime> timeList = timeStringList.stream().map(parser::parseTime).collect(Collectors.toList());
    if (startOrEndFile.equals(EndOrStart.START)) {
        recordList.forEach(rec -> rec.setStartTime(timeList.get(recordList.indexOf(rec))));
    }
    if (startOrEndFile.equals(EndOrStart.END)) {
        recordList.forEach(rec -> rec.setEndTime(timeList.get(recordList.indexOf(rec))));
    }
}

在 addTime 方法中,我将有关开始时间 (startTime) 和结束时间 (entTime) 的数据添加到 ReportRecord 类的实例中。为了使 addTime 方法具有通用性,我在 prepareReport 方法中调用了两次,并将其作为第二个枚举参数传递,该参数指示我正在为哪个字段赋值。我们如何摆脱枚举类并保持 addTime 方法的通用性?

java
  • 1 1 个回答
  • 44 Views

1 个回答

  • Voted
  1. Best Answer
    Serodv
    2022-08-13T21:37:06Z2022-08-13T21:37:06Z

    在最简单的情况下,您可以将 enum 替换为 true/false 标志。一个更美观、更通用的选择是将行为逻辑作为参数传递给方法。

    private void addTime(String timeFile, BiConsumer<ReportRecord, LocalTime> consumer) {
            List<String> timeStringList = reader.readFile(timeFile);
            timeStringList.sort(Comparator.naturalOrder());
            List<LocalTime> timeList = timeStringList.stream().map(parser::parseTime).collect(Collectors.toList());
            recordList.forEach(rec -> consumer.accept(rec, timeList.get(recordList.indexOf(rec))));
        }
    

    好吧,挑战:

    addTime(startFile, ReportRecord::setStartTime);
    addTime(endFile, ReportRecord::setEndTime);
    
    • 2

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5