gpt4 book ai didi

java - (Java) 如何让数据库删除存储的值,直到该值已存储超过 5 次?

转载 作者:行者123 更新时间:2023-12-01 11:21:12 25 4
gpt4 key购买 nike

我有点尝试以某种方式进行非常基本的内存复制。基本上,我希望我的程序接受用户输入并在大约 18 秒后忘记它(从数据库中删除它),但如果输入重复 5 次或更多,则记住它(将其永久存储在数据库中)。

这是我到目前为止的代码(顺便说一句,这是一个 JavaFX 程序):

    TextField userText = new TextField();
Timeline time;
String message;
message = userText.getText();
ArrayList<String> memory = new ArrayList<>();


if(message.contains(message) && message.contains(" ") && !memory.contains(message)){
String[] splitMessage = message.split(" ");/*To split the sentence*/

for(int i = 0; i<splitMessage.length; i++)
memory.add(splitMessage[i]); /*To add the individual words of a sentence*/
memory.add(message); /*To add the sentence itself*/
time = new Timeline(new KeyFrame(Duration.millis(18000),
ae -> memory.remove(message)));
time.play();
}

所以到目前为止我已经有了这个,它可以存储数据 18 秒。但我希望在程序尝试存储相同消息超过 5 次(无论是连续还是随机顺序)后,数据会永久存储到“内存”中。有办法做到这一点吗?

希望这是有道理的。我以不会正确措辞问题而闻名,哈哈。

提前致谢:)。

最佳答案

这是我尝试提供额外的复杂性来满足您的需求(如果我理解正确的话)。

我会替换:

ArrayList<String> memory = new ArrayList<>();

MemorySpace memorySpace = new MemorySpace();

我看到的唯一问题是正确解释:

!memory.contains(message);

可能是

memorySpace.isMemoryPermanent(message);

memorySpace.isMemoryActive(message);

希望 API 足够清晰,让您能够理解我的意图以及它如何对您的情况有所帮助。据我了解,一个单词第一次就会被永久记住,但一个句子需要五次才能永久记住。

public class MemorySpace {
private final Map<String, Memory> memorySpace;

public MemorySpace() {
this.memorySpace = new HashMap<>();
}

public void addWord(String word) {
Memory m = this.memorySpace.get(word);

if (m == null) {
this.memorySpace.put(word, new Memory(true, word))
}
}

public void addSentence(String sentence) {
Memory m = this.memorySpace.get(sentence);

if (m == null) {
this.memorySpace.put(sentence, new Memory(false, sentence))
}
else {
m.increaseSeenCount();
}
}

public boolean isMemoryPermanent(String workOrSentence) {
Memory m = this.memorySpace.get(wordOrSentence)

if (m != null) {
return m.isMemoryPermanent();
}

return false;
}

public boolean isMemoryActive(String workOrSentence) {
Memory m = this.memorySpace.get(wordOrSentence)

if (m != null) {
return m.isMemoryActive();
}

return false;
}

private class Memory {
private final boolean isWordMemory;
private final String wordOrSentence;

private int seenCount;
private long lastSeenAtMilliseconds;

Memory(boolean isWordMemory, String newWordOrSentence) {
this.isWordMemory = isWordMemory;
this.wordOrSentence = newWordOrSentence;
this.seenCount = 1;
this.lastSeenAtMilliseconds = System.currentTimeMillis();
}

boolean isWordMemory() {
return this.isWordMemory;
}

void increaseSeenCount() {
if (!this.isWordMemory) {
if (this.seenCount < 5) { // Stop overflow
this.seenCount++;
}

this.lastSeenAtMilliseconds = System.milliseconds();
}
}

void isMemoryPermanent() {
return this.isWordMemory || this.seenCount >= 5;
}

void isMemoryActive() {
return this.isWordMemory || this.isMemoryPermanent() || (System.currentTimeMillis() - this.lastSeenAtMilliseconds) < (18 * 1000);
}
}
}

关于java - (Java) 如何让数据库删除存储的值,直到该值已存储超过 5 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com