给出一个对象列表
// ["A", ["B", null, "C"], "D", ["E"], [], null, "F"];
List<Object> objects = Arrays.asList("A", Arrays.asList("B", null, "C"), "D", Arrays.asList("E"), Arrays.asList(), null, "F");
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将非空值组合到一个列表中["A", "B", "C", "D", "E", "F"]?
有些人坚持认为帖子必须显示尝试的内容
objects.stream().map(o -> {
if (o instanceof List) {
return ((List) o).stream();
} else return objects.stream();
}).filter(Objects::nonNull).collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
显然上面没有用.
我希望与之相反flatMap.我有以下代码:
List<String> list = Arrays.asList("A", "C", "B", "AA", "BB", "CC");
Stream<String> stream = list.stream();
Collection<List<String>> val = stream.sorted().collect(groupingBy(String::length)).values();
System.out.println("Values " + val);
Run Code Online (Sandbox Code Playgroud)
这确实有效,但类型是Collection<List<String>>.我怎么做到的List<List<String>>?
我可以迭代Collection或使用new Arraylist().我正在寻找Arrays.asList更简洁和不可变的东西.
如果我演员,我得到java.lang.ClassCastException.
此外,这将对整个列表进行排序,然后进行分组.有没有办法先分组,然后对较小的列表进行排序,这样会更有效率.
group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)
Sonar检测到这一点,因为中间流方法不应该被闲置主要bug
我有一个if语句嵌套在for循环内,而这两个都嵌套在另一个for循环内。我想提出一些建议,如果可以使用流API对其进行替换,以及是否应该对其进行替换或保留原样。
我一直在寻找解决方案,但是我想要的事情似乎更加复杂,因为我需要基于与另一个列表匹配的ID来修改一个列表。
for (User user : userList) {
for (Vehicle vehicle : vehicleList) {
if (user.getId().equals(vehicle.getUserID())) {
user.addVehicleToList(vehicle);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用流产生相同的结果。
import java.util.ArrayList;
import java.util.List;
public class IterationBenchmark {
public static void main(String args[]){
List<String> persons = new ArrayList<String>();
persons.add("AAA");
persons.add("BBB");
persons.add("CCC");
persons.add("DDD");
long timeMillis = System.currentTimeMillis();
for(String person : persons)
System.out.println(person);
System.out.println("Time taken for legacy for loop : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.stream().forEach(System.out::println);
System.out.println("Time taken for sequence stream : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.parallelStream().forEach(System.out::println);
System.out.println("Time taken for parallel stream : "+
(System.currentTimeMillis() - timeMillis));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
AAA
BBB
CCC
DDD
Time taken for …Run Code Online (Sandbox Code Playgroud) 我想使用新的java8 API(如stream,lambda,谓词)来使用下面的代码,并将其减少到最小行数
public static List<Long> validateChannelList(String channelList) {
List<Long> channelListNumber = new ArrayList<Long>();
String[] channels = channelList.split(",");
for (String channel : channels) {
channelListNumber.add(Long.parseLong(channel));
}
}
Run Code Online (Sandbox Code Playgroud)
请使用JAVA8帮助将foreach循环或整个方法减少到最小行数
是否可以用lambda替换构造:
DMXFrame[] frames = new DMXFrame[universes.size()];
for (int i = 0; i < frames.length; i++) {
frames[i] = universes.get(i).getDMXFrame();
}
return frames;
Run Code Online (Sandbox Code Playgroud) 我有一个整数数组,例如:
{ 30 , 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个lambda表达式(使用流)来区分数组的第一个元素(在我们的例子30中)和数组其余部分的总和,(2+3+4+5 = 13)结果是17?
我正在尝试将java7程序转换为java8。我想在下面使用流API进行输出。
public List<String> getTopThreeWeatherCondition7() {
List<String> _Top3WeatherList = new ArrayList<String>();
Map<String, Integer> _WeatherCondMap = getWeatherCondition7();
List<Integer> _WeatherCondList = new ArrayList<Integer>(_WeatherCondMap.values());
Collections.sort(_WeatherCondList, Collections.reverseOrder());
List<Integer> _TopThreeWeathersList = _WeatherCondList.subList(0, 3);
Set<String> _WeatherCondSet = _WeatherCondMap.keySet();
Integer count = 0;
for (String _WeatherCond : _WeatherCondSet) {
count = _WeatherCondMap.get(_WeatherCond);
for (Integer _TopThreeWeather : _TopThreeWeathersList) {
if (_TopThreeWeather == count) {
_Top3WeatherList.add(_WeatherCond);
}
}
}
_WeatherCondList = null;
_WeatherCondMap = null;
_TopThreeWeathersList = null;
_WeatherCondSet = null;
return _Top3WeatherList;
}
Run Code Online (Sandbox Code Playgroud) 我想使用Streams和Lambdas.但是如何用它重写我当前的方法呢?
public double calculate() {
double result = 0.0;
if (!mediumList.isEmpty()) {
Iterator<Medium> it = mediumList.iterator();
while (it.hasNext()) {
result= result+ it.next().getAge();
}
result = result / mediumList.size();
}
return result;
}
Run Code Online (Sandbox Code Playgroud) java ×10
java-stream ×10
java-8 ×8
lambda ×4
arraylist ×1
collections ×1
for-loop ×1
grouping ×1
list ×1
performance ×1
sonarqube ×1