有没有理由呢
Lists.transform()
Run Code Online (Sandbox Code Playgroud)
但不是
Lists.filter()
Run Code Online (Sandbox Code Playgroud)
?
如何正确过滤列表?我可以用
new ArrayList(Collection2.filter())
Run Code Online (Sandbox Code Playgroud)
当然,但是如果我理解正确,这种方式并不保证我的订单保持不变.
我想分组列表的元素.我现在这样做:
public static <E> List<List<E>> group(final List<E> list, final GroupFunction<E> groupFunction) {
List<List<E>> result = Lists.newArrayList();
for (final E element : list) {
boolean groupFound = false;
for (final List<E> group : result) {
if (groupFunction.sameGroup(element, group.get(0))) {
group.add(element);
groupFound = true;
break;
}
}
if (! groupFound) {
List<E> newGroup = Lists.newArrayList();
newGroup.add(element);
result.add(newGroup);
}
}
return result;
}
public interface GroupFunction<E> {
public boolean sameGroup(final E element1, final E element2);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,最好是使用番石榴?
将动画值(fadeAnim)保持为状态属性还是可以将其设置为类属性更好?
例:
class ModalShade extends React.Component {
fadeAnim = new Animated.Value(0)
render() {
return (
<Animated.View
cls="bg-black absolute-fill"
style={{ opacity: this.fadeAnim }}
/>
)
}
componentDidMount() {
Animated.spring(
this.fadeAnim, {
toValue: 0.6,
tension: 100,
friction: 20
}
).start();
}
}
Run Code Online (Sandbox Code Playgroud)
澄清:我知道该状态用于反应的和解.React-native' Animated值绕过通常的render(),因此即使没有状态更改,组件也会更新.
我没有看到在比较Animated.Value我的任何一点shouldComponentUpdate,这就是为什么我把它移出州.
我对IntelliJ IDEA的gradle集成以及gradle子项目到IDEA模块的映射感到困惑.
UPDATE
我阅读了一些关于如何避免Android内存泄漏的文章,但我仍然不确定我是否做对了.
Activity.onCreate().Context或Views的引用 .在我的onDestroy()方法中,我将所有这些实例设置为null.Bitmap的东西.Q1:那够了吗?
令我困惑的是你可以在网上找到的禁忌的经典例子(http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/):
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
setContentView(label);
}
Run Code Online (Sandbox Code Playgroud)
我认为,一旦onCreate完成,label就会超出范围并进行GCed.
Q2:这怎么会造成内存泄漏?
我的活动基本上是这样的:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Statics */
AssetUtils.initIndex(this);
BitmapLoader.startInstance(this);
/* frame */
ViewGroup frame = (ViewGroup) getLayoutInflater().inflate(R.layout.frame, null);
this.setContentView(frame);
/* create controller */
Controller controller = new Controller(frame, …Run Code Online (Sandbox Code Playgroud) 我有一个非常复杂的android应用程序.尽可能扁平化视图层次结构,但我仍然在应用程序中滞后.例如,有一个菜单,其条目通过将其高度设置为a来折叠/展开ValueAnimator.通常,动画在第一次运行时会有一点滞后,并且在第一次通过后会平滑.
我注意到,当我在菜单项上调用"requestLayout()"时,Android似乎会执行布局传递和多次测量 - 遍历整个层次结构.
这是我正在做的动画的草图:

我想使用WeakReferences作为(android)位图缓存的一部分,以便能够检查何时不再使用位图.
我的缓存的最大大小小于Java堆空间.当一个新的位图溢出缓存时,它应该放弃不再需要的位图.
我的问题:什么时候get() - WeakReference返回null的方法?
如果2.是真的,那么我可能遇到我的缓存可能会填满并且GC最近因某些原因没有运行的情况.
然后,即使我在最后一次GC运行之后已经放弃了引用,WeakReference#get()仍然会返回该对象,并且我的缓存不会清除它.
我使用guava的EventBus,遗憾的是它捕获并记录了当事件处理程序抛出RuntimeException时发生的InvocationTargetException.我可以禁用此行为吗?
我很困惑第三个"儿童"参数React.cloneElement和它的关系this.props.children.
我在高阶组件上遵循了本指南,并具有以下代码:
render() {
const elementsTree = super.render()
let myPropChange = {}
/* work on newProps... */
myPropChange.something = "nice!".
const newProps = Object.assign({}, elementsTree.props, myPropChange)
/* map children */
const newChildren = React.Children.map(elementsTree.props.children, c => something(c))
return React.cloneElement(elementsTree, newProps, newChildren)
}
Run Code Online (Sandbox Code Playgroud)
我应该将映射的孩子放入我的newProps.children或者我应该将它们作为第三个参数传递给我cloneElement吗?
Object.assign无论如何都要将孩子复制props到newProps我这里,我应该跳过它们吗?
在指南中说
组件无法保证解析完整的子树.
这在我的情况下意味着什么?那this.props.children不是吗?
添加了第4个问题:为什么我要克隆道具而不是直接编辑它们?
由于某种原因,我的Firefox4 + GreaseMonkey脚本加载了两次jQuery.我复制'n'pasted以下片段,"测试"警报显示两次.
问候
var $;
// Add jQuery
(function(){
if (typeof unsafeWindow.jQuery == 'undefined') {
var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
GM_JQ = document.createElement('script');
GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
GM_JQ.type = 'text/javascript';
GM_JQ.async = true;
GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
}
GM_wait();
})();
// Check if jQuery's loaded
function GM_wait() {
if (typeof unsafeWindow.jQuery == 'undefined') {
window.setTimeout(GM_wait, 100);
} else {
$ = unsafeWindow.jQuery.noConflict(true);
letsJQuery();
}
}
// All your GM code must be inside this function
function letsJQuery() {
alert("test");
}
Run Code Online (Sandbox Code Playgroud) java ×5
android ×3
guava ×3
javascript ×2
list ×2
reactjs ×2
ecmascript-6 ×1
exception ×1
filter ×1
function ×1
gradle ×1
greasemonkey ×1
grouping ×1
jquery ×1
layout ×1
memory-leaks ×1
performance ×1
react-native ×1
reference ×1
view ×1