Java 如何在最小数量的基础上从txt文件中获取5项
我想从文本文件中访问组中具有最小数量的5项 我能够访问组中的前5个项目,但不能访问该特定组中的最小项目Java 如何在最小数量的基础上从txt文件中获取5项,java,file-handling,Java,File Handling,我想从文本文件中访问组中具有最小数量的5项 我能够访问组中的前5个项目,但不能访问该特定组中的最小项目 List<String> itemsWithMinQuantity = new ArrayList<String>(); String lineRead; int requiredItemsInGroup = 5; FileReader fileReader = null; try {
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;
}
}
首先,我创建了一个简单的POJO来保存数量和项目数据(整行) 阅读每个项目(属于所需组)并提取数量。使用此数据为每行创建一个Item对象 接下来,按数量计数对项目进行排序(
Comparator.comparating(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()));
您必须读取属于该组id的所有项目,并按数量对其进行排序,以提取前5个项目。我应该这样做吗@user7首先将文件中的所有内容读取到列表中,然后在该列表中找到5项。这比一步到位容易得多
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;
}
}
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()));
items.sort(new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return Double.compare(o1.getQuantity(), o2.getQuantity());
}
});