我的 history() 方法面临问题,如何根据最旧的更改进行排序?

Problem faced with my history() method, how do I sort according to oldest change?

我应该创建一个 Trace class 来封装 T 类型的变量及其变化历史(作为列表)。可以使用静态方法创建 Trace 对象,将其值作为第一个参数传递,并将其(可选)历史记录作为其余参数传递。历史总是首先列出最早的更改。

这是我实现的:

import java.util.*;

@SuppressWarnings("unchecked")

class Trace<T>{
    ArrayList<T> objects;
    //int maxObjects;

    public Trace(T... words){
        this.objects = new ArrayList<T>();
        for (int i = 0; i < words.length; i++){
            objects.add(words[i]);
        }
    }

    public static <T> Trace<T> of(T... words){
        return new Trace(words);
    }

    public T get(){
        return this.objects.get(0);
    }

    public List<T> history(){
        return  this.objects;
    }

    public String toString(){
        String s = "[";
        for (int i = 0; i < this.objects.size() - 1; i++){
            String line = this.objects.get(i) + ", ";
            s += line;
        }
        s += this.objects.get(objects.size()-1) + "]";
        return s;
    }
}

然而,当我 运行 我的程序在 Jshell 上时,我期望得到

jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [h, he, hel, hell, hello]

但是,我得到的是:

jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [hello, h, he, hel, hell]

我应该如何更改我的 history() 方法,使其考虑到之前添加的 "hello",首先是列表中的 returns "hello",然后是 h,他,地狱,地狱?

看来您需要将历史与单词本身分开,或者您需要使历史方法更智能一些。如果输入中的第一项,即单词,应该始终是历史记录中的最后一项,那么这样的事情会起作用。

    public List<T> history(){
        ArrayList<T> history = this.objects.sublist(1, this.objects.length());
        return history.add(this.get())
    }