Vis*_*tna -2 java json dictionary java-8 java-stream
不寻找杰克逊解决方案。
进口清单:
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.util.List;
import java.util.stream.Collectors;
Run Code Online (Sandbox Code Playgroud)
JSON数据:
{
"Name": "ABC.com",
"Developer": "Vishwa ratna",
"Project List": [
"Compnay: National",
"Compnay: Enterprise",
"Compnay: Alamo"
]
}
Run Code Online (Sandbox Code Playgroud)
我的程序:
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
File text = new File("R:/TestJSON.txt");
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("R:\\Desktop\\TestJSON.txt"));
JSONObject jsonObject = (JSONObject) obj;
List<String> list = new ArrayList<>();
String name = (String) jsonObject.get("Name");
System.out.println(name);
String author = (String) jsonObject.get("Developer");
System.out.println(author);
JSONArray companyList = (JSONArray) jsonObject.get("Project List");
companyList.stream().map(e->{if(e.equals("Compnay: National")); return e;}).collect(Collectors.toList());
list.forEach(System.out::println);
}
catch (Exception e)
{}
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常执行,除了
companyList.stream().map(e->{if(e.equals("Compnay: National")); return e;}).collect(Collectors.toList());
list.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
我可以以其他方式获得期望的结果,但是我想知道为什么我的地图没有返回任何东西?它不应该回来Compnay: National。
结果我得到:
ABC.com
Vishwa ratna
Run Code Online (Sandbox Code Playgroud)
我期望:
ABC.com
Vishwa ratna
Compnay: National
Run Code Online (Sandbox Code Playgroud)
编辑:即使filter()按照某些人的建议在这里使用后,我也无法获得所需的结果。
filter替代map。list您的代码应为:
list = (List<String>) companyList.stream()
.filter(e-> e.equals("Compnay: National"))
.map(Object::toString)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
另一个解决方案可能是在过滤器收集到toArray之后,然后将数组转换为流,然后使用Object :: toString的map然后收集到列表,这也可以工作
list = Arrays.stream(
companyList.stream()
.filter(e -> e.equals("Compnay: National"))
.toArray())
.map(Object::toString)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
map总会返回结果,因此,如果您在内部创建条件,则map必须使用elsepart,它会在您的情况下起作用,因为您有错别字,您的条件不会产生任何罪过,但为什么在a中使用if map,并且您有filter能力避免条件?
Stream<T> filter(Predicate<? super T> predicate)
Run Code Online (Sandbox Code Playgroud)
就像你看到filter了一个谓词和返回一个新的流不是一个布尔就像你在您的评论说: