作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从文本文件中访问组中具有最小数量的 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/
我是一名优秀的程序员,十分优秀!