scala返回List類型給java

應用場景:scala那邊做數據處理,java這邊接收返回數據做邏輯處理。現在scala那邊需要將得到的數據封裝到一個List裏面,在java那邊創建一個對應Object的javabean,接收傳回來的List模型,進行解析處理。

先上javabean:

package javabean;

import java.util.ArrayList;
import java.util.List;

import com.github.katjahahn.parser.sections.idata.NameImport;
import com.github.katjahahn.parser.sections.idata.OrdinalImport;

public class ImportInfo {
    private String importDLLName;

    private List<String> importFunNameList;

    public ImportInfo() {
        super();
    }

    public ImportInfo(String importDLLName, List<String> importFunNameList) {
        super();
        this.importDLLName = importDLLName;
        this.importFunNameList = importFunNameList;
    }

    public String getImportDLLName() {
        return importDLLName;
    }

    public void setImportDLLName(String importDLLName) {
        this.importDLLName = importDLLName;
    }

    public List<String> getImportFunNameList() {
        return importFunNameList;
    }

    public void setImportFunNameList(List<String> importFunNameList) {
        this.importFunNameList = importFunNameList;
    }


}

再上scala的數據封裝類:

  def importsModel: java.util.List[ImportInfo] = {
      val importDLLList = ListBuffer[ImportInfo]().asJava

      val loader = new SectionLoader(data)
      val maybeImports = loader.maybeLoadImportSection()
      if (maybeImports.isPresent && !maybeImports.get.isEmpty) {
        val idata = maybeImports.get
        val imports = idata.getImports.asScala
        for (im <- imports) {
          val ImportInfo = new ImportInfo()
          ImportInfo.setImportDLLName(im.getName)
          val importFunNameList = ListBuffer[String]().asJava
          val importsDllFun = im.getNameImports.asScala
//          importFunNameList.clear()
          for (ni <- importsDllFun) {
            importFunNameList.add(ni.getName)
          }
          ImportInfo.setImportFunNameList(importFunNameList)
          importDLLList.add(ImportInfo)
        }
      } else ""
        importDLLList
  }
這樣就實現了scala返回List<Object>給java。本例是改項目需要參考一個開源項目,這個開源項目裏面穿插着用了scala和java,我對scala不熟悉,也並不知道爲何不全在java裏面做,而是要穿插着scala,所以在實現一個scala返回List<Object>給java也折騰了半天。另外,在折騰過程中遇到幾點問題,我先記下來,如果有哪位大神知道,懇請執教:
Q2.爲何要scala和java穿插用,是scala處理數據能力比java更佳嗎?
Q1.通常有碰到兩層循環需要其中一個List在內存循環完做一次清空的情況,java裏面的List有clear()方法,但我在scala裏面採用的ListBuffer[ImportInfo]().asJava,在clear以後就把所有之前存的也一併清空了,我換成List[ImportInfo]().asJava又拋出不支持的數據處理異常,最後不得已採用循環裏面實例化ListBuffer,不知道是否有更優方法?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章