Let's say I have a List contains numbers:
1,2,3,4,5,6,7,8,9
and I would like to split this to two lists:
- odd numbers
- even numbers
So I can do this two ways:
Solution 1:
Create two methods:
List<Integer> filterOdd(List<Integer> numbers){
List<Integer> result = new ArrayList<Integer>();
for(Integer n : numbers){
if(n % 2 != 0){
result.add(n);
}
}
return result;
}
List<Integer> filterEven(List<Integer> numbers){
List<Integer> result = new ArrayList<Integer>();
for(Integer n : numbers){
if(n % 2 == 0){
result.add(n);
}
}
return result;
}
and in the code I will call:
List<Integer> numbers = Arrays.asList(new Integer[] { 1,2,3,4,5,6,7,8,9 });
List<Integer> oddNumbers = filterOdd(numbers);
List<Integer> evenNumbers = filterEven(numbers);
and do something with these lists.
Disadvantage:
I do two loops over one collection.
Solution 2:
Create one method:
public void filter(List<Integer> numbers, List<Integer> oddNumbers, List<Integer> evenNumbers){
for(Integer n : numbers){
if(n % 2 != 0){
oddNumbers.add(n);
}else{
evenNumbers.add(n);
}
}
}
and in the code I will call:
List<Integer> numbers = Arrays.asList(new Integer[] { 1,2,3,4,5,6,7,8,9 });
List<Integer> oddNumbers = new ArrayList<Integer>();
List<Integer> evenNumbers = new ArrayList<Integer>();
filter(numbers, oddNumbers, evenNumbers);
Disadvantage:
I hear that assigning results for parameters is bad practice.
Which solution is better?