Как преобразовать преобразование коллекции с помощью java в scala
Приведенный ниже код преобразует список типов List<TestObj>
в список типов List<List<String>>
где каждый элемент списка в типе List<List<String>>
является строковым списком
размер 1. Это очень итеративный подход, можно ли его преобразовать в более функциональный
метод в Scala ?
Возможное решение : сопоставьте шаблон на List<String>
и просто создайте новый список с помощью
каждый элемент головы ?
Вывод ниже кода java:
strVal is 1
New list
strVal is 2
New list
public class Driver {
public static void main (String args[]){
/**
* Setup the test list data
*/
List<String> l = new ArrayList<String>();
l.add("1");
l.add("2");
TestObj t = new TestObj();
t.setTestList(l);
t.setName("test");
List<TestObj> tList = new ArrayList<TestObj>();
tList.add(t);
/**
* Convert the list to a new data structure
*/
List<List<String>> l3 = new ArrayList<List<String>>();
List<String> l2 = new ArrayList<String>();
int counter = 0;
for(TestObj tListElement : tList){
if(tListElement.getName().equalsIgnoreCase("test")){
List<String> lvo = tListElement.getTestList();
for(String lv : lvo){
l2.add(lv);
++counter;
if(counter == 1){
counter = 1;
l3.add(l2);
l2 = new ArrayList<String>();
counter = 0;
}
}
}
}
/**
* Output the values of the new data structure
*/
for(List<String> listVals : l3){
for(String strVal : listVals){
System.out.println("strVal is "+strVal);
}
System.out.println("New list");
}
}
}
import java.util.List;
public class TestObj {
private String name;
private List<String> testList;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getTestList() {
return testList;
}
public void setTestList(List<String> testList) {
this.testList = testList;
}
}
1 ответ:
case class TestObj(name: String, testList: Seq[String]) object Driver extends App { // Setup the test list data val tList = Seq(TestObj("test", Seq("1", "2"))) // Convert the list to a new data structure val l3 = for { t <- tList if t.name equalsIgnoreCase "test" lv <- t.testList } yield Seq(lv) // Output the values of the new data structure for (listVals <- l3) { for (strVal <- listVals) { println("strval is " + strVal) } println("New list") } }