在我测试时,下面的代码执行没有任何问题.但我无法理解逻辑.有人可以解释一下吗?
public static void main(String[] args) {
List<String> london = new ArrayList<>(Arrays.asList("Chinatown","Croydon","Eden Park"));
class City{
private String name;
City(String name){
this.name = name;
}
public void printCity(){
System.out.println(name);
}
}
london.stream().map(City::new).forEach(City::printCity); //Chinatown,Croydon,Eden Park
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例代码中,我有以下问题.
如何更改下面的代码在java 8中使用流来检查类型对象并进行转换?java 8还有其他选择吗?
private void fillObject(Object role, String issuingRange) {
if (role != null) {
List<String> rangeList2 = null;
if (role instanceof ArrayList<?>) {
rangeList2 = (ArrayList<String>) role ;
} else if (role instanceof String) {
rangeList2 = new ArrayList(Arrays.asList(role ));
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个流,以及其他一些人,我滥用了一堆电话来完成工作.当利用J8时,似乎是一种反模式.
+ Arrays.stream(resources)
+ .map(this::ingestFromFile)
+ .collect(Collectors.toList())
+ .stream()
+ .map(Container.class::cast)
+ .map(Container::getAll)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toList())
+ .forEach(
+ dataType -> {
+ loaderConstants.getRepo(dataType.toString()).save(dataType);
+ LOGGER.log(Level.INFO, "Saved: " + dataType);
+ });
Run Code Online (Sandbox Code Playgroud)
我怎样才能缩短这一点,将来我应该注意哪些陷阱以避免这种类型的开发?
我有一张地图清单。该映射包含字符串作为键和对象作为值。最可能的值也为字符串。我想按一个值分组,以便将一组值作为键,将另一组唯一值作为列表。实际上,地图列表是沙发基准选择数据。
例如:
[{"id":"1", "status":"pending"},{"id":"2", "status":"download"},{"id":"3", "status":"pending"},{"id":"4", "status":"pending"}, {"id":"5", "status":"ready"},{"id":"6", "status":"download"}] => {"pending":["1","3","4"], "download":["2","6"], "ready":["5"]}
Run Code Online (Sandbox Code Playgroud) 我有这段代码.我该如何改造它?功能风格?事实上,我有List<X>.每个X包含List<V>.此列表中的每个V都有List<M>一个参数.我需要构建Map<X,Y>,其中Y是存储在对象X中聚合的所有V对象中的所有M个对象的数量.
HashMap<Country, Integer> modelsPerCountryMap = new HashMap<>();
int count;
for (Country country : CountryDataSingleton.getCountryDataCollection()) {
count = 0;
for (CarMaker cm : country.getListOfMakers()) {
count += cm.getModels().size();
}
modelsPerCountryMap.put(country, count);
}
Run Code Online (Sandbox Code Playgroud) 我得到了一串字符串,并希望按长度映射它们
Stream<String> s = Stream.of("aaaa", "a", "aaa", "a", "aaaa", "aa", "aaaaaa", "aa");
Map<Integer, Set<String> result = null;
int i = 0;
result.put(i, s.filter(x -> (x.length() == i));
Run Code Online (Sandbox Code Playgroud)
显然,这不会以这种方式工作,因为我不能多次打开流,并且我无法访问longes String以获得良好的循环.但是我怎么能做到呢?
哪个更快?
myCollection.stream().filter(somePredicate).count();
Run Code Online (Sandbox Code Playgroud)
VS
myCollection.stream().filter(somePredicate).collect(Collectors.toList()).size();
Run Code Online (Sandbox Code Playgroud)
显然,第二个似乎更慢.但是想知道内部是否有任何优化?
我需要比较地图A,地图B中存在的关键字.如果关键字存在于两个地图(A和B)中,则添加该特定关键字和值需要使用lamda表达式添加到新地图c中.请在下面找到我的示例代码:
mapA.forEach((key, value) -> mapC.put(mapB.get(Key), value)));
Run Code Online (Sandbox Code Playgroud)
上面的代码当前不会在添加到mapC之前检查mapA中是否存在key,mapB.
我有一段代码:
table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber]).map(hash::get)
Run Code Online (Sandbox Code Playgroud)
最后一步:.map(hash::get)退货Collection<String[]>.因此我需要将所有这些收集到List.
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
返回List>期望的内容,但是
.flatMap(Stream::of).collect(Collectors.toList()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
返回相同的结果.
@Data
class Person {
private String fname;
private String lname;
private List<String> friends;
private List<BigDecimal> ratings;
...
}
@Data
class People {
private List<Person> people;
...
}
Run Code Online (Sandbox Code Playgroud)
假设我有上述课程,并且需要弄清楚任何一个人拥有的朋友数量是多少.我知道前流的方式...通过循环遍历列表中的每个元素并检查friends.size()是否大于当前存储的最长列表的数量.有没有办法简化流的代码?像这样的回答?