Birleştirme
- Java kursu
- Orta seviye
- Ders 116/116
- 6 dk
Tüm katmanları birleştirerek çalışan bir uygulama yazarsın.
Sipariş takip uygulamasını birleştir
Son derste tüm parçaları birleştirip çalışan bir sipariş takip uygulaması tamamlıyoruz. Order, OrderBook (add, listAll, largeOrders, save, load) sınıfları hazır. main metodunda üç sipariş ekler, dosyaya kaydeder, dosyadan okur ve büyük siparişleri filtreler.
Bu akış, gerçek bir uygulamanın veri akışını küçük ölçekte yansıtır: önce veri modeli, sonra koleksiyon yönetimi, sonra Stream ile analiz, sonra kalıcılık ve en sonunda birleştirme. Her katman önceki derslerde ayrı ayrı işlendi.
Birleştirme akışı
Birleştirme akışı beş aşamalıdır: (1) OrderBook book = new OrderBook(); ile boş defter; (2) üç add çağrısı ile siparişler; (3) book.save("orders.txt"); ile dosyaya yazma; (4) book.load("orders.txt"); ile satır sayısı okuma; (5) book.largeOrders().size() ile büyük sipariş sayısı.
Bu sıra bağımlılıkları gözetir: dosya işlemi önce eklemeyi, büyük sipariş sayısı dosyaya yazılmış veriyi varsayar. Akış, gerçek bir sipariş sisteminin küçük bir kesitidir.
Uygulama Tüm uygulamayı birleştir
Tüm parçaları bir araya getir. Order ve OrderBook (add, listAll, largeOrders, save, load) sınıflarını yaz; main imzasına throws IOException ekle. main içinde OrderBook book = new OrderBook(); oluştur, üç sipariş ekle: "1", "Ayşe", 50, "2", "Alex", 150, "3", "Mehmet", 200. book.save("orders.txt"); ile kaydet. System.out.println(book.load("orders.txt")); ile satır sayısını, System.out.println(book.largeOrders().size()); ile büyük sipariş sayısını yazdır.
Başlangıç kodu
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
class Order {
String id;
String customer;
int amount;
Order(String id, String customer, int amount) {
this.id = id;
this.customer = customer;
this.amount = amount;
}
}
class OrderBook {
List<Order> orders = new ArrayList<>();
void add(Order o) { orders.add(o); }
void listAll() {
orders.forEach(o -> System.out.println(o.id + " " + o.customer + " " + o.amount));
}
List<Order> largeOrders() {
return orders.stream().filter(o -> o.amount >= 100).collect(Collectors.toList());
}
void save(String path) throws IOException {
List<String> lines = orders.stream()
.map(o -> o.id + "|" + o.customer + "|" + o.amount)
.collect(Collectors.toList());
Files.write(Path.of(path), lines);
}
int load(String path) throws IOException {
return Files.readAllLines(Path.of(path)).size();
}
}
// main: throws IOException ekle, bir OrderBook oluştur, üç sipariş ekle, save, load ve largeOrders ile yazdırÖrnek çözüm
class Order {
String id;
String customer;
int amount;
Order(String id, String customer, int amount) {
this.id = id;
this.customer = customer;
this.amount = amount;
}
}
class OrderBook {
List<Order> orders = new ArrayList<>();
void add(Order o) { orders.add(o); }
void listAll() {
orders.forEach(o -> System.out.println(o.id + " " + o.customer + " " + o.amount));
}
List<Order> largeOrders() {
return orders.stream().filter(o -> o.amount >= 100).collect(Collectors.toList());
}
void save(String path) throws IOException {
List<String> lines = orders.stream()
.map(o -> o.id + "|" + o.customer + "|" + o.amount)
.collect(Collectors.toList());
Files.write(Path.of(path), lines);
}
int load(String path) throws IOException {
return Files.readAllLines(Path.of(path)).size();
}
}
public class Main {
public static void main(String[] args) throws IOException {
OrderBook book = new OrderBook();
book.add(new Order("1", "Ayşe", 50));
book.add(new Order("2", "Alex", 150));
book.add(new Order("3", "Mehmet", 200));
book.save("orders.txt");
System.out.println(book.load("orders.txt"));
System.out.println(book.largeOrders().size());
}
}Beklenen çıktı
3 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Birleştirme sırasında ilk adım nedir?
- Dosyadan okuma
- Sipariş ekleme Doğru cevap
- Stream ile filtreleme
- Büyük siparişleri sayma
Açıklama: Önce sipariş eklenir; dosya ve filtreleme eklenen veriye ihtiyaç duyar.
2 Dosyadan okuma çağrısını tamamla
int lines = book.____("orders.txt");
int lines = book.load("orders.txt");
Açıklama: load metodu dosyadaki satır sayısını döndürür.
3 Proje özetini eşleştir
| Kavram | Anlamı |
|---|---|
Order |
Tek sipariş verisi |
OrderBook |
Koleksiyon yönetimi |
largeOrders |
Stream filtresi |
save/load |
Dosya kalıcılığı |