java練習項目——記帳本

包含登陸、註冊、記帳、每日帳單查看、每個月報表、添加記帳類型這些功能。數據存儲採用的是txt文檔+xml文檔。程序是一個控制檯程序,用IntelliJ IDEA+jdk8開發。涉及到的知識有List集合、文件讀寫、xml文件和對象互轉、還有在List的查詢中使用lamda表達式。這是我複習javase,熟悉開發工具的練手項目。
主要想總結的地方是 List集合中使用lamda表達式和xml和對象的互轉。
 
一、List集合中使用lamda表達式。
Optional<String> co = listAll.stream().filter(item -> item.contains(temp)).findFirst();
if (co.isPresent()) {

    billType = co.get();
    Optional<BillItem> obi = listItems.stream().filter(item -> item.getName().contains(temp)).findFirst();

    if (obi.isPresent()) {
        existItem = obi.get();
    }
    }
2.com.thoughtworks.xstream的使用。
這裏主要想說說 xml帶屬性和子節點是集合的時候如何使用轉換器轉換。
package com.ll.bm;

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import java.util.*;

public class BillDateConvert implements Converter {


    @Override
    public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mContext) {

        BillDate bd = (BillDate) o;

        writer.addAttribute("time", bd.getTime());

        List<BillItem>listItems=bd.getListItems();

        for (BillItem bi:listItems){

            writer.startNode("BillItem");
            mContext.convertAnother(bi,new BillItemConvert());

            writer.endNode();

        }
    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unContext) {
        BillDate bd = new BillDate();
        bd.setTime(reader.getAttribute("time"));
        List<BillItem> list = new ArrayList<BillItem>();
        while (reader.hasMoreChildren()) {
            reader.moveDown();

            Object o = unContext.convertAnother(bd, BillItem.class, new BillItemConvert());
            BillItem od = (BillItem) o;
            list.add(od);
            reader.moveUp();

        }
        bd.setAnimalList(list);
        // Object o= unContext.convertAnother(bd,bd.getListItems().getClass(),new BillItemConvert());
        return bd;
    }

    @Override
    public boolean canConvert(Class aClass) {
        return aClass.equals(BillDate.class);
    }
}
<Bill>
  <BillDate time="2020-10-27">
    <BillItem name="1|購物" val="5.0"/>
    <BillItem name="2|餐飲" val="13.0"/>
    <BillItem name="6|交通" val="9.0"/>
  </BillDate>
</Bill>

 代碼下載java

javase記帳本管理程序
相關文章
相關標籤/搜索