gpt4 book ai didi

java - 如何从txt文件中根据最小数量获取5个项目

转载 作者:行者123 更新时间:2023-12-02 00:07:46 25 4
gpt4 key购买 nike

我想从文本文件中访问组中具有最小数量的 5 个项目

我可以访问该组中的前 5 个项目,但不能访问该特定组中的最少项目

        List<String> itemsWithMinQuantity = new ArrayList<String>();
String lineRead;
int requiredItemsInGroup = 5;
FileReader fileReader = null;
try {
fileReader = new FileReader("file path");
} catch (FileNotFoundException e) {
e.printStackTrace();
}

BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((lineRead = bufferedReader.readLine()) != null) {
if (lineRead.contains(("Group ID : " + groupID))) {

if (requiredItemsInGroup != 0) {
itemsWithMinQuantity.add(lineRead);
} else {
break;

}
requiredItemsInGroup--;
}
}

if (itemsWithMinQuantity.isEmpty()) {
return Collections.singletonList("No items in entered group No.");

} else {
return itemsWithMinQuantity;
}
}

预计:它应该根据组的最低数量返回 5 件商品及其组 ID 和数量

Actual

"Group ID : 1 Quantity : 5 Item Title : MUCHAE NAMUL (DAIKON)",

"Group ID : 1 Quantity : 0 Item Title : LUSH LEMON DRIZZLE!",

"Group ID : 1 Quantity : 0 Item Title : CHOCOLATE GRAVY",

"Group ID : 1 Quantity : 0 Item Title : MICHAEL SYMON'S CHICKEN CUTLET MILANESE WITH ARUGULA SALAD",

"Group ID : 1 Quantity : 0 Item Title : CLASSIC BEEF BRAISE"

最佳答案

首先,我创建了一个简单的 POJO 来保存数量和商品数据(整行)。

private static class Item {
private int quantity;
private String itemData;

private Item(String itemData, int quantity) {
this.itemData = itemData;
this.quantity = quantity;
}

public int getQuantity() {
return quantity;
}

public String getItemData() {
return itemData;
}
}

读取每个项目(属于所需组)并提取数量。使用此数据为每一行创建一个 Item 对象。

接下来,按数量对项目进行排序 (Comparator.comparing(Item::getQuantity))。

这样,您就可以将所有商品按数量排序。剩下的就是打印此列表的前 5 项。

List<Item> items = new ArrayList<>();
String lineRead;
FileReader fileReader = null;
try {
fileReader = new FileReader("...");
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}

BufferedReader bufferedReader = new BufferedReader(fileReader);
Pattern pattern = Pattern.compile("Quantity : (\\d+)");
while ((lineRead = bufferedReader.readLine()) != null) {
if (lineRead.contains(("Group ID : " + groupId))) {
Matcher matcher = pattern.matcher(lineRead);
int quantity;
if (matcher.find())
{
quantity = Integer.parseInt(matcher.group(1));
} else {
throw new RuntimeException("Unexpected data format. Quantity not found");
}
Item item = new Item(lineRead, quantity);
items.add(item);
}
}
items.sort(Comparator.comparing(Item::getQuantity));

items.stream()
.limit(5)
.forEach(item -> System.out.println(item.getItemData()));

正则表达式 Quantity : (\\d+) 匹配包含单词 Quantity 后跟数字的字符串。通过获取第一个匹配组,我们可以单独获得数量的值。

Comparing 方法引用只是传统比较器的优雅表示。

items.sort(new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return Double.compare(o1.getQuantity(), o2.getQuantity());
}
});

关于java - 如何从txt文件中根据最小数量获取5个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58144282/

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